【开源】Tsar——灵活的系统和应用采集软件
摘要:?在開源人的盛會(huì)LinuxCon + ContainerCon + CloudOpen中國(簡(jiǎn)稱LC3)大會(huì)上,阿里云CDN團(tuán)隊(duì)的空見(花名),為大家分享了開源的系統(tǒng)和應(yīng)用采集軟件Tsar的背景、設(shè)計(jì)思路和用法、模塊開發(fā)以及未來規(guī)劃。
在開源人的盛會(huì)LinuxCon + ContainerCon + CloudOpen中國(簡(jiǎn)稱LC3)大會(huì)上,阿里云CDN團(tuán)隊(duì)的空見(花名),為大家分享了開源的系統(tǒng)和應(yīng)用采集軟件Tsar的背景、設(shè)計(jì)思路和用法、模塊開發(fā)以及未來規(guī)劃。
實(shí)際上它是阿里巴巴在做系統(tǒng)或應(yīng)用監(jiān)控時(shí)候的一個(gè)idea,團(tuán)隊(duì)同學(xué)在實(shí)際的使用過程中比較舒服,軟件擴(kuò)展性、穩(wěn)定性、易用性也比較好,所以目前在所有機(jī)器上都有部署,作為基礎(chǔ)監(jiān)控agent,來提供穩(wěn)定的數(shù)據(jù)支持,同時(shí)也對(duì)外開源。
Tsar的背景
對(duì)于線上SA/PE/研發(fā)來說,當(dāng)他開發(fā)了一個(gè)軟件并部署之后,需要關(guān)注軟件的運(yùn)行情況,需要到上面來看整個(gè)服務(wù)器的CPU/內(nèi)存/網(wǎng)絡(luò)/IO等基本的指標(biāo)是否OK,針對(duì)這些指標(biāo)找一些軟件的瓶頸和針對(duì)性的優(yōu)化。其實(shí)現(xiàn)在市面上類似的軟件非常多,所有的軟件都有一定的專用性,可能只是采集某一塊的東西,每個(gè)軟件采集的指標(biāo)不同,這些指標(biāo)時(shí)間的用法是不一致的。所以對(duì)于使用的人的要求非常高,需要知道所有的監(jiān)控軟件怎樣使用,對(duì)于排查線上問題非常不方便。這也是我們最開始的痛點(diǎn),我們發(fā)現(xiàn)所有的數(shù)據(jù)我們都有,但是怎樣去聯(lián)動(dòng)和使用起來是不方便的事情。于是,我們就萌生了Tsar的想法。
下圖是現(xiàn)在線上有的很多命令的使用,針對(duì)于整個(gè)Linux站里各個(gè)層級(jí)都有一些對(duì)應(yīng)的命令,對(duì)于運(yùn)維等使用人員的學(xué)習(xí)上手成本非常高,不利于我們統(tǒng)一做一些監(jiān)控。
需求與解法
所以我們最開始的需求就是希望有一個(gè)簡(jiǎn)單易用,基礎(chǔ)數(shù)據(jù)齊全,最好也有應(yīng)用數(shù)據(jù)的采集軟件。因?yàn)閯偛帕械亩际峭ㄓ弥笜?biāo),但是我們有應(yīng)用軟件,所以我們希望知道應(yīng)用軟件上的一些數(shù)據(jù),比如QPS、響應(yīng)時(shí)間。目前的開源軟件是無法支持的,需要業(yè)務(wù)自己寫采集工具,做數(shù)據(jù)收集和監(jiān)控。
另外我們希望數(shù)據(jù)之間能做一些數(shù)據(jù)關(guān)聯(lián),比如說當(dāng)前CPU高了,是不是帶來了一些其他數(shù)據(jù)指標(biāo)的波動(dòng),這些指標(biāo)之間需要對(duì)照去看,才能確定問題出在哪。
同時(shí),數(shù)據(jù)也要能過濾、實(shí)時(shí)離線查看,并且可以本地長(zhǎng)時(shí)間保存,也能遠(yuǎn)程發(fā)送,方便在中心做一些數(shù)據(jù)的分析和挖掘。
有了這些需求,我們的解法是模仿Sar,Sar本身是系統(tǒng)活動(dòng)報(bào)告,實(shí)現(xiàn)系統(tǒng)指標(biāo)的采集,我們基于它做了一些擴(kuò)展。Tsar除了做系統(tǒng)層面數(shù)據(jù)采集,還能做應(yīng)用層面采集,還可以進(jìn)行模塊化,并支持?jǐn)U展。比如現(xiàn)在采集了十個(gè)指標(biāo),如果有另外有應(yīng)用指標(biāo)和業(yè)務(wù)數(shù)據(jù)想去采集,可以很方便的在Tsar里去寫個(gè)模塊來采集。同時(shí)也支持簡(jiǎn)單的報(bào)警和發(fā)送遠(yuǎn)端。
設(shè)計(jì)和用法
Tsar的原理非常簡(jiǎn)單,主要是用了動(dòng)態(tài)庫的特性,我們每一個(gè)采集模塊里面都會(huì)實(shí)現(xiàn)一些函數(shù),比如采集函數(shù)、分析處理函數(shù),還有注冊(cè)的時(shí)候提供的模塊的基本字段,比如模塊名、模塊包含的字段、字段從哪里采集、采集完之后如何處理和輸出,這些函數(shù)注冊(cè)到Tsar的框架里,每一個(gè)周期去采集的時(shí)候調(diào)用這些指令的函數(shù),就可以完成整個(gè)數(shù)據(jù)的采集和輸出的過程。
整個(gè)模塊的注冊(cè)執(zhí)行過程如下圖:
下圖是Tsar功能性大圖,最下面是系統(tǒng)計(jì)數(shù)器和軟件接口,具體的每一個(gè)模塊是參考Sar實(shí)現(xiàn)了很多系統(tǒng)指標(biāo)的采集,另外對(duì)于應(yīng)用軟件也提供了LVS、Nginx等比較常見的應(yīng)用軟件模塊。
在上面采集過程中,會(huì)對(duì)模塊做一些過濾處理,具體執(zhí)行每個(gè)模塊的采集函數(shù),拿到這些數(shù)據(jù),按照格式化,框架會(huì)把數(shù)據(jù)做格式化,存到/var/log/tsar.data中。我們采集到所有的原始數(shù)據(jù),是以文件的形式存儲(chǔ)在上面的,這里有一個(gè)跟Sar的區(qū)別,Tsar里面的字段是可讀的,Sar是無法看到這里面的含義的。
這些數(shù)據(jù)采集到之后,支持對(duì)遠(yuǎn)端的發(fā)送,比如發(fā)送到一個(gè)網(wǎng)絡(luò)的接口上,或者發(fā)送到MySql、Nagios等。另外,數(shù)據(jù)的展現(xiàn)分兩塊,分為實(shí)時(shí)的展現(xiàn)和歷史的展現(xiàn),實(shí)時(shí)的展現(xiàn)就需要隔一秒看下指標(biāo)是什么樣子的,歷史的展現(xiàn)是對(duì)過去的每一分鐘數(shù)據(jù)做一下歷史的回放。目前,Tsar支持秒級(jí)、分鐘級(jí)、按天等不同維度的數(shù)據(jù)展現(xiàn)。
Tsar的用法
Tsar用法是比較簡(jiǎn)單的,不管哪種模塊,都是共享這個(gè)用法的。上面最常見的就是check這個(gè)指令,就是把系統(tǒng)最近一次的監(jiān)控指標(biāo)輸出出來。有了這個(gè)功能之后,所有的基礎(chǔ)軟件的采集基本上每分鐘都可以調(diào)用一個(gè)check,拿到最近一分鐘的監(jiān)控?cái)?shù)據(jù),把這份數(shù)據(jù)拿到我們監(jiān)控平臺(tái)上,里面去做一些監(jiān)控配置和中心化處理。這個(gè)指令是用的最為頻繁的。
-c是一個(gè)定時(shí)執(zhí)行的指令,通過這個(gè)方式,會(huì)把你當(dāng)前開啟的模塊所有的采集函數(shù)都執(zhí)行一遍,拿到數(shù)據(jù),把數(shù)據(jù)存到tsar.data的原始文件里去,供以后使用。
-i就是指定一個(gè)間隔時(shí)間,多少秒或多少分鐘。
下圖是一些用法的截圖,在實(shí)時(shí)模式下可以指定-l 或者--live,可以現(xiàn)場(chǎng)采集模塊數(shù)據(jù),實(shí)時(shí)分析結(jié)果,不指定默認(rèn)是離線方式。時(shí)間間隔,-i不指定的話,默認(rèn)是秒和分鐘,實(shí)時(shí)是每秒采集顯示,離線是每分鐘顯示。也可以指定模塊, --mod_name,指定了幾個(gè)模塊,就展示幾個(gè)指標(biāo)。通過這種方式,可以把你關(guān)注的指標(biāo)在一屏里顯示出來,這樣可以看到他們之間的影響和關(guān)系,從而找到問題的癥結(jié)所在。
Tsar也支持多item模塊,有的時(shí)候一個(gè)系統(tǒng)指標(biāo)是有多個(gè)實(shí)例的,item概念就在這里體現(xiàn),可以比較靈活的展示數(shù)據(jù)。另外,--check是看我們最后一分鐘的數(shù)據(jù),它會(huì)把最后一分鐘每個(gè)指標(biāo)和字段在這一行里展示出來,可以很方便的做一些監(jiān)控處理。
本身Tsar是單機(jī)軟件,可以給其他系統(tǒng)提供豐富的數(shù)據(jù)源輸入。
下圖是比較常見的配置,包括配置文件、指定模塊、指定輸出等。
下圖是如何輸出到Mysql和Nagios的配置辦法。
定制開發(fā)
Tsar目前支持C,bash、Lua三種方式開發(fā)自定義模塊,內(nèi)部已經(jīng)有近100個(gè)應(yīng)用模塊。模塊組成包括模塊名稱、描述信息、采集函數(shù)、展現(xiàn)函數(shù)等,Tsar本身也可以利用tsardevel的腳本自動(dòng)生成一個(gè)模板,在這個(gè)模版的基礎(chǔ)上進(jìn)行修改,比較高效。
具體模塊開發(fā)內(nèi)容如下圖:
采集函數(shù)是對(duì)value_1/2/3進(jìn)行具體的抓取,不管是去計(jì)數(shù)器文件,還是接口里,都可以把值拿到。但是拿到的值并不是最終要展現(xiàn)的值,而是瞬間的值。
展現(xiàn)的值要通過數(shù)據(jù)展現(xiàn)函數(shù)來進(jìn)行處理運(yùn)算,展現(xiàn)函數(shù)里的兩個(gè)輸入?yún)?shù)會(huì)告訴你,你采集的最近2個(gè)數(shù)組的數(shù)據(jù)是什么,通過對(duì)2個(gè)數(shù)組的運(yùn)算,最后得出來的結(jié)果就是最終展現(xiàn)的數(shù)字。當(dāng)前面幾個(gè)內(nèi)容都做好了之后,最后在模塊里做一下注冊(cè)函數(shù)的生成就好了,這里有幾個(gè)關(guān)鍵信息,比如模塊名稱。使用方式、模塊字段數(shù)據(jù)結(jié)構(gòu)、字段個(gè)數(shù)、采集函數(shù)和展現(xiàn)函數(shù)。
至此,一個(gè)模塊基本就完成了。
未來規(guī)劃
我們對(duì)Tsar的未來規(guī)劃,主要三個(gè)方面。
第一個(gè)是跨平臺(tái),對(duì)于某些Linux版本支持的不是特別好,所以在跨平臺(tái)方面我們會(huì)多多嘗試。?
第二個(gè)完善框架,目前框架比較大的問題,單個(gè)模塊出現(xiàn)一些異常,整個(gè)采集就會(huì)掛掉,這塊我們會(huì)去解耦一些模塊和框架的強(qiáng)依賴關(guān)系,希望容災(zāi)性更好。
第三是豐富一些模塊,常見的系統(tǒng)模塊已經(jīng)很多,內(nèi)部的應(yīng)用模塊也比較豐富了,我們也希望開源這塊大家可以多提供一些模塊進(jìn)來,能讓我們支持的采集種類更豐富一些。
目前在阿里巴巴整個(gè)開源代碼庫里,外部的貢獻(xiàn)者不多,十幾個(gè),內(nèi)部有超過一百人在貢獻(xiàn)代碼,首頁和代碼庫歡迎大家訪問。有任何問題也可以聯(lián)系本文分享者:空見。
?首頁:?http://tsar.taobao.org/
?代碼:?https://github.com/alibaba/tsar
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的【开源】Tsar——灵活的系统和应用采集软件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里巴巴上线静态开源站点搭建工具 Doc
- 下一篇: 为什么深度学习没有取代传统的计算机视觉?