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

2021-09-13 13:06:56 字數 4015 閱讀 4826

摘要: 在開源人的盛會linuxcon + containercon + cloudopen中國(簡稱lc3)大會上,阿里雲cdn團隊的空見(花名),為大家分享了開源的系統和應用採集軟體tsar的背景、設計思路和用法、模組開發以及未來規劃。

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

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

tsar的背景

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

需求與解法

所以我們最開始的需求就是希望有乙個簡單易用,基礎資料齊全,最好也有應用資料的採集軟體。因為剛才列的都是通用指標,但是我們有應用軟體,所以我們希望知道應用軟體上的一些資料,比如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版本支援的不是特別好,所以在跨平台方面我們會多多嘗試。

第二個完善框架,目前框架比較大的問題,單個模組出現一些異常,整個採集就會掛掉,這塊我們會去解耦一些模組和框架的強依賴關係,希望容災性更好。

第三是豐富一些模組,常見的系統模組已經很多,內部的應用模組也比較豐富了,我們也希望開源這塊大家可以多提供一些模組進來,能讓我們支援的採集種類更豐富一些。

開源配置管理系統的選擇和搭建

最近,新進一家公司,作配置管理員,搭建了以下配置管理系統平台。因為都是開源的,基本上都是從網上找到了解決方法。現在陸續整理些文字,也共享出來。我的qq號 1448357969,歡迎交流。作業系統 ubuntu 18.04lts,最新的5年維護版本。搭建lamp環境 linux apache mysq...

B S系統和C S系統的應用比較分析

b s系統 c s系統 最基本架構 瀏覽器和伺服器結構 資料大集中,資料倉儲 客戶機 伺服器結構 資料分布 節約成本 大大簡化了客戶端電腦載荷,減輕了系統維護與公升級的成本和工作量,降低了使用者的總體成本 tco 它是一次性到位的開發 需要多個可複製的硬體配置來搭建多個區域網的分布式環境。複製品越多...

作業系統和應用的關係

問題 監控程式的主要功能是什麼 程式的載入和執行 在作業系統上執行的程式稱為什麼?應用呼叫作業系統功能稱為什麼?系統呼叫system call windows vista是多少位的作業系統?32位 也有64位的版本 gui是什麼的縮寫?graphical user inte ce圖形使用者介面 wy...