實用|從0到1 搭建Web性能監控系統
工具介紹

1. Statsd 是一個使用Node開發網絡守護進程,它的特點是通過UDP(性能好,及時掛了也不影響主服務)或者TCP來監聽各種數據信息,然后發送聚合數據到后端服務進行處理。常見支持的「Graphite」,「ElasticaSearch」,「InfluxDB」 等等 ,它集成了各種語言的客戶端API,這里我們使用了jsocol/pystatsd: A Python client for statsd進行數據收集。
2. Graphite 是一套Python寫的開源編程接口,主要是用來收集服務器的及時狀態,在這里主要作為statsd的數據后端。分為了三個子項目
- carbon 守護進程,接收StatsD發送過來的原始統計數據。
- whisper 用來存儲統計數據的時間序列數據庫。
- graphite webapp 用來圖形化展示統計數據的web項目
3. Grafana 使用Go開發,可以在界面上設計調整自己的統計圖表,支持多重報警,可定制化。
安裝
在這里我使用了[synthesize(https://github.com/obfuscurity/synthesize)進行快速安裝Graphite和Statsd包,這里面需要注意安裝數據在 **/opt/graphite ** 目錄下面。這里面我們安裝啟動了
- service carbon-cache start # statsd數據處理后會進入中轉
- service memcached start # 緩存
- service collectd start # 收集服務負載可選
- service apache2 start # 這可以通過使用nginx替換
- service statsite start # statsd的后端服務
這里面需要單獨啟動graphite-web應用,端口啟動:0.0.0.0:8080,后面配置數據源需要使用。
- cd /opt/graphite/
- sudo ./run-graphite-devel-server.py /opt/graphite/
Grafana數據包可以通過手動下載安裝也可以通過apt-get 安裝
- sudo apt-get install grafana
啟動之后訪問3000端口就能看到這樣一個頁面,默認的賬號密碼:admin,admin可以通過配置github或者google登錄。

login
數據收集
Python端我們使用statsd進行數據統一打點到到監控服務器收集
- >>> import statsd
- >>> c = statsd.StatsClient('localhost', 8125)
- >>> c.incr('foo') # Increment the 'foo' counter.
- >>> c.timing('stats.timed', 320) # Record a 320ms 'stats.timed'.
- 這里面我們通過Python把數據收集到statsite,通過Graphite Web服務來進行展示。
配置Graphite
進入Grafana后臺,進行配置點擊 「Data Sources」進行配置Graphite的數據(來自前端statsd收集)。

data_source
接下來配置對應的數據展示:

add-graph
到此基本的數據配置就完了,恭喜你擁有了一個完整的監控系統。
為了方便理解這里我補充一下,數據從應用內,添加agent,把應用的時間性能數據通過statsd收集發送到服務端,通過carbon統計,whisper存儲最后展示在graphite,其中這里面我們用grafana來替代了graphite原生的UI展示,也就是我們題圖的效果。