本文檔適用人員:研發和運維員工
- 監控平台要做到什么程度?為什么要自己做?
- 幾個通用技術問題
- 繪圖所依賴的數據如何收集?如何加工?如何存儲?
- 圖形如何繪制,各種指標如何疊加?
- 拓撲關系如何繪制?
- 技術選型哲學
- 最終選了statsd+graphite
- 數據的采集
- 數據存儲的粒度
- 天機的技術選型
- Zabbix
- Nagios
- Centreon
- Logstash
- Ganglia+Cacti
規則:模仿我們發現問題后先檢查數據庫主從同步是否有問題的習慣
|
天機系統發現成單金額或驗證券數或短信發送條數環比大幅下降后,啟動檢查規則,
自動逐一檢查各種從庫的主從同步情況。
如果發現主從延遲超過閾值,則天機 DashBoard 應浮出兩條紅色警告提示(可點擊進入):
如果發現主從同步失敗導致了同步停止,則應浮出兩條紅色警告提示(可點擊進入):
|
大致想來,李丹劉奎還需要解決這么幾個基礎問題:

數據庫拓撲關系
|
在監控系統里登記了 DB 的IP和分組后,其實已經可以探測到 DB 之間的主從關系(包括級聯關系)了,能自動繪制出登記的所有數據庫服務器之間的關系。舉例如下:
![]()
圖2 自動繪制數據庫拓撲
|
- 不重復制造輪子;
- 既然找輪子,那這個輪子就應該只做一件事,且把它做到最好。
- grafana + influxdb
- statsd + graphite
- collectd + graphite
- grafana + graphite

Graphite 是一個企業級的監控工具,用 Python 編寫,采用 django 框架,sqlite 數據庫存儲,自有簡單文本協議通訊,繪圖功能強大。最初由 Chris Davis 在 Orbitz 工作時,作為一個輔助項目開發的,最終成了一個監控基礎工具,如他所言,Graphite provides real-time visualization and storage of numeric time-series data,重點解決:
- 實時可視化
- 時間序列數據的存儲
嚴格地說,Graphite 只是一個根據數據繪圖的工具,數據收集通常由第三方工具或插件完成,它自帶了 carbon 和 whisper,還可根據其協議選用別的數據源供其繪圖。官方描述,預計用 Ceres 替代 Whisper。
圖4 graphite圖例
簡單的文本協議和強大的繪圖功能使得它可以方便地擴展到任何需要監控的系統上。豆瓣、Google、GitHub、Instagram、Uber等公司都用它。
3.3.CollectD
C語言開發的 collectd 是一個較為古老的工具,像 statsd 一樣它也做周期性收集統計數據,collectd 還管數據存儲。它能夠通過插件支持檢測各種各樣的系統信息,如數據庫、UPS。
要想查看 collectd 收集的信息,還需要安裝 web 界面或者 Cacti,於是工作模式就是:
collectd 作為守護進程運行,每隔 10 秒收集信息,而 Cacti 每隔5分鍾運行一個 PHP 腳本來收集信息(兩者的時間間隔可配置)。
- schemaless(無結構),可以是任意數量的列
- Scalable
- min, max, sum, count, mean, median 一系列函數,方便統計
- Native HTTP API, 內置http支持,使用http讀寫
- Powerful Query Language,類似SQL
- Built-in Explorer,自帶管理工具

3.5.Grafana
grafana 則類似 ES Kibana 的可視化面板,有着非常漂亮的圖表和布局,目前支持 Graphite、Influxdb 和 Opentsdb) + influxdb(分布式時序、事件和指標數據庫)等配搭。


http://監控系統域名/db/createImage/target/%5B%22stats.timers.mysql.172_16_999_991-3306.com_select_persecond.upper%22%2C%22stats.timers.mysql.172_16_999_992-3306.com_select_persecond.upper%22%2C%22stats.timers.mysql.172_16_999_993-3306.com_select_persecond.upper%22%5D/from/-1hour.html?width=492&n=0.8623758849623238


圖10 graphite 邏輯圖
圖11 Graphite 數據流轉圖
- 天機平台主動拉數據,主要集中在數據庫的主從同步、數據庫的拓撲關系等這樣的關系型數據采集上。
- 其他場景下,基本都需要采集單點狀態的數據,則由客戶端腳本(即 agent)獲取數據后,再推送到天機平台。
[default_1min_for_1day]
pattern = .*
retentions = 10s:1d
可以自定義 retentions,注意表達式里每一個時間間隔必須是第一個的倍數,也就是說,第一個是10s,那么第二個只能是10s的整數倍,以此類推。
[stats] pattern = ^stats.* retentions = 10s:1d,30s:7d,1m:28d,15m:5y
[business_monitoring]
pattern = ^business_monitoring\.
retentions = 1m:5y
Understanding StatsD and Graphite: http://blog.pkhamre.com/2012/07/24/understanding-statsd-and-graphite/
窩窩的解決方案介紹列表:
#研發解決方案#基於StatsD+Graphite的智能監控解決方案
#研發解決方案介紹#Recsys-Evaluate(推薦評測)
#數據技術選型#即席查詢Shib+Presto,集群任務調度HUE+Oozie
