開源服務內部監控系統 graphite簡介

NO IMAGE

開源監控系統,大名鼎鼎的有nagois,catis。公司就有運維採用nagios作伺服器與服務狀態監控,同時結合外掛提供郵件簡訊報警功能;catis通過snmp協議對伺服器進行監控,利用RRDTool繪製漂亮的報表供你做效能分析。

這些是運維人員的利器,然而服務開發人員卻很少去使用這樣的工具,因為它們難以做到對我們開發的服務內部執行狀態的監控。假如,你想監控自己開發服務的響應時間,五分鐘一個點去繪製報表,或者監控你的服務各個時間內部快取命中率等資訊,這些工具基本幫上不忙。

常用方案

為了滿足這類需求,很多時候,開發人員會是自行開發一套監控系統,將服務內部的狀態,定時發往監控伺服器,將這些狀態存入資料庫,然後自行匯制報表。如果你要監控的服務是個叢集的話,就還需要解決監控資料彙總的問題。
另一種常用方案,將各種狀態資料列印到日誌檔案中,定時將這些日誌進行彙總,然後對彙總結果執行job分析(有些是彙總到hadoop中,跑mapreduce job),這樣做的話監控效果的實時性較差。
為了避免上述的工作量,我們接觸並使用了兩種可用於服務內部資料監控,提供出色報表效果的的開源系統,分別是Graphite與Ganglia。

Graphite

Graphite給我最大的體會是它使用方式的簡單易用。catis採用snmp協議,意味著需要在被監控節點上安裝snmp代理;ganglia的監控也需要你在被監控節點上安裝gmond用於採集資訊。Graphite使用簡單的文字協議,只需要簡單地通過TCP socket向graphite server傳送文字資料

quentinxxz.server.count  1234 1440245016

其中quentinxxz.server.count是一項具體的監控指標的名稱, 1440245016是資料產生的時間戳,1234是該時間截下的指標數值。隨後你就可以在graphite web上看到相應的資料曲線。
Graphite使用python實現,主要包含三個部份:

1.whisper

Whisper is a fixed-size database, similar in design to RRD (round-robin-database)

whipser是一個固定檔案大小的資料庫。這意味著whipser的資料檔案被建立時具有固定的大小。
例我們對quentinxxz.server.count條目,在/opt/graphite/conf/storage-schemas.conf檔案中
做如下配置

[quentinxxz]
pattern = quentinxxz.server.count
retentions = 1min:50d,10min:50d

1min表示以1分種為精度記錄一個點,50d表儲存50天。所以建立檔案的需要儲存的點數量,應為1 * 60 * 24 * 50.
whisper另一個有趣的地方是其強大的聚合功能,上述配置中10min表示我們配置的另一精度,whisper會根據我們指定的聚合方式(例如,取10個點中的最大值,最小值,平均值),按照10min一個點的精度將結果儲存到另一個儲存區中。具體聚合方式的配置位於/opt/graphite/conf/storage-aggregation.conf檔案中。
此外,RRD是不接收先於當前最近時間截的update的,而whisper則可以做到(但是這種需求好像不多)。關於更多RRD與whisper的比較,可以參考文件 http://graphite.wikidot.com/whisper

2. carbon (監控資料的 Twisted 守護程序)

Carbon是基於Twisted實現,是Graphite的後端實現。
Carbon的主要作用,是接收被監控節點的連線,收集各個指標的資料,將這些資料寫入快取並最終持久化到whisper儲存檔案中去。Carbonr能保證Graphite web 繪製出實時接到的指標更新,其原理也很簡單位,有點類似lucence,carbon接收到的資料會先存在快取中,然後再一起寫入whisper的硬碟儲存。Graphite web通過向carbon-cache發起請求,會同時查詢位於快取與硬碟中的資料。

3. graphite-web

Graphite web是基於Django實現的webapp,其主要功能自然是繪製報表與展示。我不併建議直接使用Graphite web,因為儘管其功能還是比較強大,但介面讓我覺得醜得要死。這裡我推薦使用第三方的一個Graphite前端開源應用Tessera。
使用Tessera的前提還是需要Graphite web的安裝,因為它會直接請求Graphite web獲取資料。Tessera的介面還是相當酷炫的,比較符合技術人員的審美。這是它吸引我去使用Graphite的一個重要的加分項。
此外,其靈活的配置,可以讓我們自由組合,我們的Dashboard。 不多說,直接上圖。



 

Graphite使用總結

個人使用感受,Graphite配合Tessera,最主要的優點是在於介面簡潔漂亮,傳輸協議簡單。其的缺點在於,當你的應用是一個大叢集時,目前Graphite沒有為你把叢集中來自不同伺服器的資料整合彙總的能力,例如,對叢集中有10個搜尋結點的快取命中情況進行監控,就需要採用10個不同的指標名稱(一般在其中加入主機名區分),意味著10條不同的曲線,但無法直接利用Graphite進行彙總成一個指標或曲線,讓你看到搜尋叢集整體的快取命中情況。