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