1. 程式人生 > >【開源】Tsar——靈活的系統和應用采集軟件

【開源】Tsar——靈活的系統和應用采集軟件

什麽 span 問題 我們 value scn 自定義 agent 告訴

摘要: 在開源人的盛會LinuxCon + ContainerCon + CloudOpen中國(簡稱LC3)大會上,阿裏雲CDN團隊的空見(花名),為大家分享了開源的系統和應用采集軟件Tsar的背景、設計思路和用法、模塊開發以及未來規劃。

在開源人的盛會LinuxCon + ContainerCon + CloudOpen中國(簡稱LC3)大會上,阿裏雲CDN團隊的空見(花名),為大家分享了開源的系統和應用采集軟件Tsar的背景、設計思路和用法、模塊開發以及未來規劃。

實際上它是阿裏巴巴在做系統或應用監控時候的一個idea,團隊同學在實際的使用過程中比較舒服,軟件擴展性、穩定性、易用性也比較好,所以目前在所有機器上都有部署,作為基礎監控agent,來提供穩定的數據支持,同時也對外開源。

Tsar的背景

對於線上SA/PE/研發來說,當他開發了一個軟件並部署之後,需要關註軟件的運行情況,需要到上面來看整個服務器的CPU/內存/網絡/IO等基本的指標是否OK,針對這些指標找一些軟件的瓶頸和針對性的優化。其實現在市面上類似的軟件非常多,所有的軟件都有一定的專用性,可能只是采集某一塊的東西,每個軟件采集的指標不同,這些指標時間的用法是不一致的。所以對於使用的人的要求非常高,需要知道所有的監控軟件怎樣使用,對於排查線上問題非常不方便。這也是我們最開始的痛點,我們發現所有的數據我們都有,但是怎樣去聯動和使用起來是不方便的事情。於是,我們就萌生了Tsar的想法。
技術分享圖片

下圖是現在線上有的很多命令的使用,針對於整個Linux站裏各個層級都有一些對應的命令,對於運維等使用人員的學習上手成本非常高,不利於我們統一做一些監控。

技術分享圖片

需求與解法

所以我們最開始的需求就是希望有一個簡單易用,基礎數據齊全,最好也有應用數據的采集軟件。因為剛才列的都是通用指標,但是我們有應用軟件,所以我們希望知道應用軟件上的一些數據,比如QPS、響應時間。目前的開源軟件是無法支持的,需要業務自己寫采集工具,做數據收集和監控。

另外我們希望數據之間能做一些數據關聯,比如說當前CPU高了,是不是帶來了一些其他數據指標的波動,這些指標之間需要對照去看,才能確定問題出在哪。

同時,數據也要能過濾、實時離線查看,並且可以本地長時間保存,也能遠程發送,方便在中心做一些數據的分析和挖掘。

有了這些需求,我們的解法是模仿Sar,Sar本身是系統活動報告,實現系統指標的采集,我們基於它做了一些擴展。Tsar除了做系統層面數據采集,還能做應用層面采集,還可以進行模塊化,並支持擴展。比如現在采集了十個指標,如果有另外有應用指標和業務數據想去采集,可以很方便的在Tsar裏去寫個模塊來采集。同時也支持簡單的報警和發送遠端。

設計和用法

Tsar的原理非常簡單,主要是用了動態庫的特性,我們每一個采集模塊裏面都會實現一些函數,比如采集函數、分析處理函數,還有註冊的時候提供的模塊的基本字段,比如模塊名、模塊包含的字段、字段從哪裏采集、采集完之後如何處理和輸出,這些函數註冊到Tsar的框架裏,每一個周期去采集的時候調用這些指令的函數,就可以完成整個數據的采集和輸出的過程。

整個模塊的註冊執行過程如下圖:

技術分享圖片

下圖是Tsar功能性大圖,最下面是系統計數器和軟件接口,具體的每一個模塊是參考Sar實現了很多系統指標的采集,另外對於應用軟件也提供了LVS、Nginx等比較常見的應用軟件模塊。
技術分享圖片

在上面采集過程中,會對模塊做一些過濾處理,具體執行每個模塊的采集函數,拿到這些數據,按照格式化,框架會把數據做格式化,存到/var/log/tsar.data中。我們采集到所有的原始數據,是以文件的形式存儲在上面的,這裏有一個跟Sar的區別,Tsar裏面的字段是可讀的,Sar是無法看到這裏面的含義的。

這些數據采集到之後,支持對遠端的發送,比如發送到一個網絡的接口上,或者發送到MySql、Nagios等。另外,數據的展現分兩塊,分為實時的展現和歷史的展現,實時的展現就需要隔一秒看下指標是什麽樣子的,歷史的展現是對過去的每一分鐘數據做一下歷史的回放。目前,Tsar支持秒級、分鐘級、按天等不同維度的數據展現。

Tsar的用法

Tsar用法是比較簡單的,不管哪種模塊,都是共享這個用法的。上面最常見的就是check這個指令,就是把系統最近一次的監控指標輸出出來。有了這個功能之後,所有的基礎軟件的采集基本上每分鐘都可以調用一個check,拿到最近一分鐘的監控數據,把這份數據拿到我們監控平臺上,裏面去做一些監控配置和中心化處理。這個指令是用的最為頻繁的。

技術分享圖片
-c是一個定時執行的指令,通過這個方式,會把你當前開啟的模塊所有的采集函數都執行一遍,拿到數據,把數據存到tsar.data的原始文件裏去,供以後使用。
-i就是指定一個間隔時間,多少秒或多少分鐘。

下圖是一些用法的截圖,在實時模式下可以指定-l 或者--live,可以現場采集模塊數據,實時分析結果,不指定默認是離線方式。時間間隔,-i不指定的話,默認是秒和分鐘,實時是每秒采集顯示,離線是每分鐘顯示。也可以指定模塊, --mod_name,指定了幾個模塊,就展示幾個指標。通過這種方式,可以把你關註的指標在一屏裏顯示出來,這樣可以看到他們之間的影響和關系,從而找到問題的癥結所在。

技術分享圖片

Tsar也支持多item模塊,有的時候一個系統指標是有多個實例的,item概念就在這裏體現,可以比較靈活的展示數據。另外,--check是看我們最後一分鐘的數據,它會把最後一分鐘每個指標和字段在這一行裏展示出來,可以很方便的做一些監控處理。
技術分享圖片

本身Tsar是單機軟件,可以給其他系統提供豐富的數據源輸入。

下圖是比較常見的配置,包括配置文件、指定模塊、指定輸出等。
技術分享圖片

下圖是如何輸出到Mysql和Nagios的配置辦法。

技術分享圖片

定制開發

Tsar目前支持C,bash、Lua三種方式開發自定義模塊,內部已經有近100個應用模塊。模塊組成包括模塊名稱、描述信息、采集函數、展現函數等,Tsar本身也可以利用tsardevel的腳本自動生成一個模板,在這個模版的基礎上進行修改,比較高效。

技術分享圖片

具體模塊開發內容如下圖:

技術分享圖片

采集函數是對value_1/2/3進行具體的抓取,不管是去計數器文件,還是接口裏,都可以把值拿到。但是拿到的值並不是最終要展現的值,而是瞬間的值。

技術分享圖片

展現的值要通過數據展現函數來進行處理運算,展現函數裏的兩個輸入參數會告訴你,你采集的最近2個數組的數據是什麽,通過對2個數組的運算,最後得出來的結果就是最終展現的數字。當前面幾個內容都做好了之後,最後在模塊裏做一下註冊函數的生成就好了,這裏有幾個關鍵信息,比如模塊名稱。使用方式、模塊字段數據結構、字段個數、采集函數和展現函數。

技術分享圖片

至此,一個模塊基本就完成了。

未來規劃

我們對Tsar的未來規劃,主要三個方面。

第一個是跨平臺,對於某些Linux版本支持的不是特別好,所以在跨平臺方面我們會多多嘗試。
第二個完善框架,目前框架比較大的問題,單個模塊出現一些異常,整個采集就會掛掉,這塊我們會去解耦一些模塊和框架的強依賴關系,希望容災性更好。
第三是豐富一些模塊,常見的系統模塊已經很多,內部的應用模塊也比較豐富了,我們也希望開源這塊大家可以多提供一些模塊進來,能讓我們支持的采集種類更豐富一些。

目前在阿裏巴巴整個開源代碼庫裏,外部的貢獻者不多,十幾個,內部有超過一百人在貢獻代碼,首頁和代碼庫歡迎大家訪問。有任何問題也可以聯系本文分享者:空見。

技術分享圖片

?首頁: http://tsar.taobao.org/
?代碼: https://github.com/alibaba/tsar

原文鏈接


【開源】Tsar——靈活的系統和應用采集軟件