在上一篇文章【一篇運維老司機的大數據平臺監控寶典(1)】中,我們介紹了目前聯通大數據監控平臺由Grafana+Influxdb+Prometheus+Alertmanager等組件組成,并且著重詳述了以Grafana為核心的圖形化展示功能。
本文繼續針對運維監控體系的另一重要內容,即告警分析、處理及發送功能進行分享。
一、為什么要選擇Prometheus+Alertmanager
你的監控系統是否曾面臨這些痛點:
告警信息推送無法分類,無法針對某部分人進行特定告警 重復告警或無用告警過多,重要告警易被埋沒 監控系統無法提供可視化展示,或僅能部分展示 監控歷史數據不能二次查詢或多維度查詢,故障排查缺少依據
對于業務量、平臺主機量級較大的公司來說,使用以nagios+ganglia為首的傳統的監控平臺往往會遇到以上情況,顯得力不從心。經過大量、豐富的實戰工作后,我們最后選擇Prometheus+Alertmanager+釘釘的搭配作為聯通大數據監控平臺的告警分析、處理及發送工具組合。這套組合不僅能夠針對以上痛點一一解決,也可以說是運維人員保障集群平臺穩定運行、故障排查、問題定位的一把利器。
在下面的章節中,筆者會對系統中的Prometheus、Alertmanager等組件逐一進行介紹。
1. Prometheus簡介
基于上圖,大家可以清晰的看到,Prometheus實際上是一個tsdb型數據庫,所有的采集數據以metric的形式保存在其中,且能夠將數據落到本地磁盤中,供使用人員二次查詢數據。
Prometheus同時附加了強大的計算與分析功能,能夠利用各種labels與promql語句來完成多維度的監控數據查詢,從而為故障排查與問題定位提供可靠的證據。
監控規則方面,Prometheus可以根據promql來獲取數據,并且與固定閾值進行計算比較,若超出正常范圍,則標記為告警信息,并且可以分組分標簽定義告警描述,供后續Alertmanager使用。
在拓展性方面,Prometheus可以輕松的完成服務發現功能,并擁有每秒上萬數據點的監控數據收集與分析的處理能力,完全擺脫了傳統監控系統對監控主機數量的要求。目前聯通大數據平臺機器幾千余臺,監控實例過十萬,監控實例指標過千萬,Prometheus優良的性能可以做到完美支撐。
2. Prometheus特點
下圖中以一個簡單例子說明:該條查詢可以看到某集群接口機15分鐘內的系統負載,涉及到的標簽維度為集群、主機IP、主機類型等。在實際線上環境中,香港免備案主機,還可以添加多個標簽來完成查詢,并且可以利用promql特有的查詢語句(sum、count_values、topk等)來完成更加豐富的多維度查詢,提供可靠、便捷、直觀的監控數據供運維人員使用。
(2) 優秀的自定義及第三方監控拓展功能
Pushgateway是Prometheus環境中的一個data_collector。把它定義為采集者的原因很簡單,標準的Prometheus會采用pull模式從target中獲取監控數據,但當由于外力原因(如網絡、硬件等)無法直接從target中拉取數據時,就要依靠Pushgateway了,請看下圖:
大致流程為client上部署的腳本(支持多語言shell、python等)會收集target中的數據,并且以metric形式傳送到Pushgateway中,只要保證client和Pushgateway能夠正常通信即可。Prometheus會按照配置時間,定時到Pushgateway上拉取監控數據,從而達到收集target的目的。
下圖為Pushgetway發送數據的代碼過程:
那么是否可以這么理解:對于常見組件(redis、mysql、nginx、haproxy等),我們可以依靠現有的豐富client庫,直接進行監控納管;對于一些特殊組件或自定義業務,可通過多語言腳本采集監控數據或業務埋點方式,把Pushgateway作為一個data_collector來收集各方數據,從而完成監控納管。
(3) 良好的監控生態圈之常見client庫
由于近年Prometheus的興起,開源社區中越來越多的人將自己的代碼貢獻出來,使得Prometheus擁有龐大的client庫(redis、mysql、nginx、haproxy等),運維人員可以利用這些client實現即開即用即監控的功能。
3. 配置