StatsD 是由 Etsy 開發(fā)并發(fā)布的匯總和總結(jié)應(yīng)用指標(biāo)的一個(gè)簡(jiǎn)單的守護(hù)進(jìn)程爆办,近些年來(lái)發(fā)展迅速,已經(jīng)變成了一個(gè)用于收集應(yīng)用性能指標(biāo)的統(tǒng)一的協(xié)議泛烙。
關(guān)于 Statsd 的使用已經(jīng)有很多文章介紹過理卑,所以本文也不再贅述,本文主要來(lái)聊一聊它的來(lái)源原理以及和它類似的一個(gè)工具 Collectd 蔽氨。
Etsy 使用 Statsd 監(jiān)控系統(tǒng)應(yīng)用
Etsy 工程師曾寫 blog 介紹自己怎樣使用 statsd 以及為什么使用它藐唠,有時(shí)間可以看一看這篇文章 Measure Anything, Measure Everything 。
Statsd 最初是由 Etsy 的 Erik Kastner 編寫配合 Graphite/Carbon 使用的前端進(jìn)程孵滞,最初是為了匯總和總結(jié)應(yīng)用指標(biāo)中捆。開始使用的語(yǔ)言是 Node,后來(lái)其他語(yǔ)言也開發(fā)了此功能坊饶。它收集數(shù)據(jù)時(shí)基于2大功能:Counting & Timing。應(yīng)用程序的指標(biāo)通過特定語(yǔ)言的客戶端庫(kù)進(jìn)行檢測(cè)殴蓬,然后這些庫(kù)用很簡(jiǎn)單的協(xié)議和 Statsd 后臺(tái)守護(hù)進(jìn)程進(jìn)行通信匿级,后臺(tái)進(jìn)程匯集指標(biāo)并把他們傳遞到繪圖軟件或監(jiān)控后臺(tái)。
Statsd 如和工作
首先染厅,你可以通過 Statsd 收集任何你想要的數(shù)據(jù)痘绎,例如 Gauges , Counters , Timing 和 Sets ,Statsd 客戶端庫(kù)通過發(fā)送 UDP 數(shù)據(jù)包來(lái)調(diào)用每個(gè) Statsd 服務(wù)器肖粮,使用 UPD 發(fā)送數(shù)據(jù)到 Stated 服務(wù)器的原因很明顯孤页,快,UDP是斷開連接的協(xié)議涩馆,數(shù)據(jù)包不需要確認(rèn)就發(fā)送到收件人行施,不會(huì)像通過 TCP 或提交數(shù)據(jù)時(shí)由于 HTTP 協(xié)議而阻斷允坚。在調(diào)用時(shí),Statsd 客戶端庫(kù)沒有任何緩沖的數(shù)據(jù)蛾号,這樣兩者之間調(diào)用就很簡(jiǎn)單稠项,如果有大數(shù)據(jù)量的操作時(shí),可以選擇在數(shù)據(jù)發(fā)送到 Statsd 時(shí)加入樣本數(shù)據(jù)鲜结,即發(fā)送一定比例的數(shù)據(jù)展运。
Statsd 后臺(tái)守護(hù)進(jìn)程會(huì)監(jiān)聽所有應(yīng)用庫(kù)的 UDP 流量,通過時(shí)間流收集數(shù)據(jù)并在后臺(tái)所需時(shí)間間隔內(nèi)更新數(shù)據(jù)精刷。例如聚合功能調(diào)用計(jì)時(shí)器可以每10秒收集一次數(shù)據(jù)拗胜,分析出這些數(shù)據(jù)的最大值,最小值怒允,平均值挤土,中間值,90值和95值误算,Statsd 后臺(tái)守護(hù)進(jìn)程和后端將根據(jù)所用的后端改變協(xié)議仰美。監(jiān)控后端把收集到的指標(biāo)轉(zhuǎn)化成圖表,例如最常用的 Graphite儿礼,這個(gè)數(shù)據(jù)處理工具處理收集到的指標(biāo)咖杂,作出突出偏離常態(tài)的曲線圖,下圖為 Graphite 處理前后的圖表蚊夫。
Etsy 已開源 Statsd 知纷,以下是基于基本線路協(xié)議發(fā)送的指標(biāo)格式:
<metricname>:<value>|<type>
如果你在本地運(yùn)行 StatsD 和默認(rèn)的 UDP 服務(wù)器壤圃,可在命令行發(fā)送最簡(jiǎn)單的指標(biāo)格式:
echo "foo:1|c" | nc -u -w0 127.0.0.1 8125
現(xiàn)在 Statsd 已經(jīng)發(fā)展的很壯大,總結(jié)有以下幾個(gè)原因:
簡(jiǎn)單:非常容易獲取應(yīng)用程序琅轧,StatsD 協(xié)議是基于文本的伍绳,可以直接寫入和讀取
低耦合性:基于后臺(tái)程序運(yùn)行的應(yīng)用程序,采取 UDP 這種發(fā)送后完了的協(xié)議乍桂,收集指標(biāo)和應(yīng)用程序本身之間沒有依賴
占用空間谐迳薄:StatsD 客戶端非常輕便的,不帶任何狀態(tài)睹酌,不需要的線程权谁,且添加可以忽略不計(jì)
普遍及支持多種語(yǔ)言: 有基于 Ruby,Python憋沿,Java旺芽,erlang,Node,Scala采章,Go运嗜,haskell 等幾乎所有語(yǔ)言的客戶端
開源且商用
Collectd
Collectd 其實(shí)是 C 語(yǔ)言開發(fā)的一個(gè)守護(hù)(daemon)進(jìn)程,像 Statsd 一樣它也做周期性收集統(tǒng)計(jì)數(shù)據(jù)共缕,此外它還管數(shù)據(jù)存儲(chǔ)洗出,給各種存儲(chǔ)方式提供不同的存儲(chǔ)機(jī)制,具體可以參考 Collectd 的官網(wǎng) 图谷。
Collectd 不僅僅是收集性能數(shù)據(jù)翩活,還根據(jù)這些數(shù)據(jù)會(huì)周期性統(tǒng)計(jì)系統(tǒng)的相關(guān)信息,以這些統(tǒng)計(jì)信息為依準(zhǔn)便贵,檢查當(dāng)前服務(wù)器性能(如作為性能分析 performance analysis)和預(yù)測(cè)系統(tǒng)未來(lái)的 load(如能力部署 capacity planning)菠镇,不過它本身并不能生成圖形,雖然它能寫 RRD 文件承璃,但是它不能從這些文件生成圖形利耍,所以一般需要結(jié)合一個(gè)數(shù)據(jù)繪圖工具 Graphite/Cacti 。像 VPSee 就是選用 Collectd 收集機(jī)器的各個(gè)性能參數(shù)盔粹。
相較于其他收集系統(tǒng)相關(guān)指標(biāo)的工具隘梨,Collectd 有一定的優(yōu)點(diǎn),比如嵌入式系統(tǒng)舷嗡,C 語(yǔ)言開發(fā)(高效)轴猎、無(wú)需系統(tǒng) cron 支持(獨(dú)立)、簡(jiǎn)單易用进萄,此外他還包含有超過70多種插件以及文檔支持捻脖。
Collectd 除了解析 configfile 其他一切都是在插件下完成,這意味著主守護(hù)進(jìn)程沒有任何外部依賴中鼠,現(xiàn)在已知的可以應(yīng)用在 Linux可婶,Solaris,Mac OS X上援雇,AIX矛渴,F(xiàn)reeBSD,NetBSD 和 OpenBSD 等系統(tǒng)中熊杨。
Collectd 配置簡(jiǎn)單:除了那些需要加載的模塊曙旭,你不需要配置其他任何東西。
Collectd 不是腳本晶府,而是運(yùn)行在內(nèi)存里面的進(jìn)程,不需要每次記錄都啟動(dòng)繁重的解釋器钻趋,有 nice 級(jí)別的 10 秒鐘的默認(rèn)解析川陆。
Collectd 能夠處理任意數(shù)量的主機(jī),從一個(gè)到幾千個(gè)蛮位,而且可以通過利用該資源盡可能高效较沪。
Collectd 支持 SNMP鳞绕,該 SNMP 插件提供了一個(gè)通用接口 SNM 協(xié)議,可以用它來(lái)查詢值尸曼,并基于 Collectd 機(jī)制處理他們们何,例如發(fā)送他們做其他地方的服務(wù)器實(shí)例。
Collectd 支持各種自定義擴(kuò)展控轿,C-plugins冤竹,Perl-plugins,Java-plugins茬射,Python-plugins鹦蠕,UNIX 域套接字,Java 的 MBean 的支持等在抛。
接下來(lái)簡(jiǎn)單介紹一下安裝方法钟病,安裝配置 Colloectd,首先要?jiǎng)?chuàng)建一個(gè) collectd.d
目錄便于存放稍后會(huì)遇到的插件配置文件 graphite.conf
刚梭,并在 collectd.conf
包含這個(gè)目錄 肠阱;
$ sudo apt-get install collectd
$ sudo mkdir /etc/collectd/collectd.d
$ sudo vi /etc/collectd/collectd.conf
...
Include "/etc/collectd/collectd.d"
安裝 git 并下載 collectd-carbon 插件:
$ sudo apt-get install git
$ sudo git clone https://github.com/indygreg/collectd-carbon.git /opt/collectd-plugins
修改插件的配置文件的 ModulePath 部分,指向 carbon_writer.py
文件所在目錄朴读,并且修改 LineReceiverHost 部分:
$ sudo vi /etc/collectd/collectd.d/graphite.conf
<LoadPlugin "python">
Globals true
</LoadPlugin>
<Plugin "python">
# carbon_writer.py is at path /opt/collectd-plugins/carbon_writer.py
ModulePath "/opt/collectd-plugins/"
Import "carbon_writer"
<Module "carbon_writer">
LineReceiverHost "monitor.vpsee.com"
LineReceiverPort 2003
DifferentiateCountersOverTime true
LowercaseMetricNames true
TypesDB "/usr/share/collectd/types.db"
</Module>
</Plugin>
修改好配置文件后重啟服務(wù):
$ sudo /etc/init.d/collectd restart
好了屹徘,被監(jiān)控的服務(wù)器已經(jīng)安裝好了 Collectd ,要想真正使用此外還需要安裝繪圖工具磨德,具體怎么安裝我也不詳細(xì)介紹了缘回,畢竟重點(diǎn)不是那個(gè),以下是 Graphite 的相關(guān)鏈接:Graphite 和 Graphite Project典挑,希望對(duì)你有所幫助酥宴。
Cloud Insight 集監(jiān)控、管理您觉、計(jì)算拙寡、協(xié)作、可視化于一身琳水,幫助所有 IT 公司肆糕,減少在系統(tǒng)監(jiān)控上的人力和時(shí)間成本投入,讓運(yùn)維工作更加高效在孝、簡(jiǎn)單诚啃。想閱讀更多技術(shù)文章,請(qǐng)?jiān)L問 OneAPM 官方技術(shù)博客私沮。
本文轉(zhuǎn)自 OneAPM 官方技術(shù)博客