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

樰籬發表於2018-07-10

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

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

Tsar的背景

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

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

需求與解法

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

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

同時,資料也要能過濾、實時離線檢視,並且可以本地長時間儲存,也能遠端傳送,方便在中心做一些資料的分析和挖掘。

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

設計和用法

Tsar的原理非常簡單,主要是用了動態庫的特性,我們每一個採集模組裡面都會實現一些函式,比如採集函式、分析處理函式,還有註冊的時候提供的模組的基本欄位,比如模組名、模組包含的欄位、欄位從哪裡採集、採集完之後如何處理和輸出,這些函式註冊到Tsar的框架裡,每一個週期去採集的時候呼叫這些指令的函式,就可以完成整個資料的採集和輸出的過程。

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

image.png

下圖是Tsar功能性大圖,最下面是系統計數器和軟體介面,具體的每一個模組是參考Sar實現了很多系統指標的採集,另外對於應用軟體也提供了LVS、Nginx等比較常見的應用軟體模組。
image.png

在上面採集過程中,會對模組做一些過濾處理,具體執行每個模組的採集函式,拿到這些資料,按照格式化,框架會把資料做格式化,存到/var/log/tsar.data中。我們採集到所有的原始資料,是以檔案的形式儲存在上面的,這裡有一個跟Sar的區別,Tsar裡面的欄位是可讀的,Sar是無法看到這裡面的含義的。

這些資料採集到之後,支援對遠端的傳送,比如傳送到一個網路的介面上,或者傳送到MySql、Nagios等。另外,資料的展現分兩塊,分為實時的展現和歷史的展現,實時的展現就需要隔一秒看下指標是什麼樣子的,歷史的展現是對過去的每一分鐘資料做一下歷史的回放。目前,Tsar支援秒級、分鐘級、按天等不同維度的資料展現。

Tsar的用法

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

image.png
-c是一個定時執行的指令,通過這個方式,會把你當前開啟的模組所有的採集函式都執行一遍,拿到資料,把資料存到tsar.data的原始檔案裡去,供以後使用。
-i就是指定一個間隔時間,多少秒或多少分鐘。

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

image.png

Tsar也支援多item模組,有的時候一個系統指標是有多個例項的,item概念就在這裡體現,可以比較靈活的展示資料。另外,–check是看我們最後一分鐘的資料,它會把最後一分鐘每個指標和欄位在這一行裡展示出來,可以很方便的做一些監控處理。
image.png

本身Tsar是單機軟體,可以給其他系統提供豐富的資料來源輸入。

下圖是比較常見的配置,包括配置檔案、指定模組、指定輸出等。
image.png

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

image.png

定製開發

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

image.png

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

image.png

採集函式是對value_1/2/3進行具體的抓取,不管是去計數器檔案,還是介面裡,都可以把值拿到。但是拿到的值並不是最終要展現的值,而是瞬間的值。

image.png

展現的值要通過資料展現函式來進行處理運算,展現函式裡的兩個輸入引數會告訴你,你採集的最近2個陣列的資料是什麼,通過對2個陣列的運算,最後得出來的結果就是最終展現的數字。當前面幾個內容都做好了之後,最後在模組裡做一下注冊函式的生成就好了,這裡有幾個關鍵資訊,比如模組名稱。使用方式、模組欄位資料結構、欄位個數、採集函式和展現函式。

image.png

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

未來規劃

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

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

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

image.png

•首頁: http://tsar.taobao.org/
•程式碼: https://github.com/alibaba/tsar

活動推薦

【TechDay】阿里雲CDN Tengine開源技術沙龍-上海站,將在8月29日下午阿里虹橋中心展開,多位專家現場探討CDN QUIC、TLSv1.3、直播、Tengine實踐等話題,參與活動即可贏取阿里雲定製禮品,點選瞭解活動詳情與報名:https://yq.aliyun.com/event/359


相關文章