基于Prometheus和Grafana的監(jiān)控平臺 - 運(yùn)維告警

通過前面幾篇文章我們搭建好了監(jiān)控環(huán)境并且監(jiān)控了服務(wù)器卸耘、數(shù)據(jù)庫扭勉、應(yīng)用,運(yùn)維人員可以實(shí)時(shí)了解當(dāng)前被監(jiān)控對象的運(yùn)行情況忠聚,但是他們不可能時(shí)時(shí)坐在電腦邊上盯著DashBoard,這就需要一個告警功能两蟀,當(dāng)服務(wù)器或應(yīng)用指標(biāo)異常時(shí)發(fā)送告警,通過郵件或者短信的形式告訴運(yùn)維人員及時(shí)處理战虏。

今天我們就來聊聊 基于Prometheus和Grafana的監(jiān)控平臺的異常告警功能党涕。

告警方式

Grafana

新版本的Grafana已經(jīng)提供了告警配置,直接在dashboard監(jiān)控panel中設(shè)置告警即可膛堤,但是我用過后發(fā)現(xiàn)其實(shí)并不靈活,不支持變量绿渣,而且好多下載的圖表無法使用告警燕耿,所以我們不選擇使用Grafana告警中符,而使用Alertmanager誉帅。


file

Alertmanager

相比于Grafana的圖形化界面蚜锨,Alertmanager需要依靠配置文件實(shí)現(xiàn),配置稍顯繁瑣踏志,但是勝在功能強(qiáng)大靈活胀瞪。接下來我們就一步一步實(shí)現(xiàn)告警通知。

告警類型

Alertmanager告警主要使用以下兩種:

  • 郵件接收器 email_config
  • Webhook接收器 webhook_config圆雁,會用post形式向配置的url地址發(fā)送如下格式的參數(shù)帆谍。
 {
    "version": "2",
    "status": "<resolved|firing>",
    "alerts": [{
            "labels":  < object > ,
            "annotations":  < object > ,
            "startsAt": "<rfc3339>",
            "endsAt": "<rfc3339>"
            }]
    }

這次主要使用郵件的方式進(jìn)行告警。

實(shí)現(xiàn)步驟

  • 下載
    GitHub上下載最新版本的Alertmanager,將其上傳解壓到服務(wù)器上汛蝙。
    tar -zxvf alertmanager-0.19.0.linux-amd64.tar.gz
  • 配置Alertmanager
vi alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_smarthost: 'mail.163.com:25' #郵箱發(fā)送端口
  smtp_from: 'xxx@163.com'
  smtp_auth_username: 'xxx@163.com' #郵箱賬號
  smtp_auth_password: 'xxxxxx' #郵箱密碼
  smtp_require_tls: false
route:
  group_by: ['alertname']
  group_wait: 10s  # 最初即第一次等待多久時(shí)間發(fā)送一組警報(bào)的通知
  group_interval: 10s # 在發(fā)送新警報(bào)前的等待時(shí)間
  repeat_interval: 1h # 發(fā)送重復(fù)警報(bào)的周期 對于email配置中,此項(xiàng)不可以設(shè)置過低坚洽,否則將會由于郵件發(fā)送太多頻繁,被smtp服務(wù)器拒絕
  receiver: 'email'
receivers:
  - name: 'email'
    email_configs:
    - to: 'xxx@xxx.com'

修改完成后可以使用./amtool check-config alertmanager.yml校驗(yàn)文件是否正確鞍盗。

file

校驗(yàn)正確啟動alertmanager跳昼。`nohup ./alertmanager &`。(第一次啟動可以不使用nohup靜默啟動鹅颊,方便后面查看日志)

我們只定義了一個路由,那就意味著所有由Prometheus產(chǎn)生的告警在發(fā)送到Alertmanager之后都會通過名為`email`的receiver接收历帚。實(shí)際上杠娱,對于不同級別的告警,會有不同的處理方式摊求,因此在route中,我們還可以定義更多的子Route睹栖。具體配置規(guī)則大家可以去百度進(jìn)一步了解茧痕。
  • 配置Prometheus
    在Prometheus安裝目錄下建立rules文件夾,放置所有的告警規(guī)則文件踪旷。

    alerting:
        alertmanagers:
        - static_configs:
            - targets: ['192.168.249.131:9093']
    
    rule_files:
        - rules/*.yml
    

在rules文件夾下建立告警規(guī)則文件service_down.yml,當(dāng)服務(wù)器下線時(shí)發(fā)送郵件。

groups:
 - name: ServiceStatus
   rules:
     - alert: ServiceStatusAlert
       expr: up == 0  
       for: 2m 
       labels:
         team: node
       annotations:
         summary: "Instance {{ $labels.instance }} has bean down"
         description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 2 minutes."
         value: "{{ $value }}"
**配置詳解**  

alert:告警規(guī)則的名稱舀患。
expr:基于PromQL表達(dá)式告警觸發(fā)條件气破,用于計(jì)算是否有時(shí)間序列滿足該條件。
for:評估等待時(shí)間低匙,可選參數(shù)。用于表示只有當(dāng)觸發(fā)條件持續(xù)一段時(shí)間后才發(fā)送告警努咐。在等待期間新產(chǎn)生告警的狀態(tài)為PENDING,等待期后為FIRING渗稍。
labels:自定義標(biāo)簽,允許用戶指定要附加到告警上的一組附加標(biāo)簽报强。
annotations:用于指定一組附加信息拱燃,比如用于描述告警詳細(xì)信息的文字等,annotations的內(nèi)容在告警產(chǎn)生時(shí)會一同作為參數(shù)發(fā)送到Alertmanager碗誉。

配置完成后重啟Prometheus,訪問Prometheus查看告警配置弄跌。
file
  • 測試

關(guān)閉node_exporter,過2分鐘就可以收到告警郵件啦尝苇,截圖如下:


file
Alertmanager的告警內(nèi)容支持使用模板配置,可以使用好看的模板進(jìn)行渲染淳玩,感興趣的可以試試非竿!

The More

node exporter的一些計(jì)算語句

  • CPU使用率(單位為percent)
    (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

  • 內(nèi)存已使用(單位為bytes)
    node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Cached_bytes - node_memory_Buffers_bytes - node_memory_Slab_bytes

  • 內(nèi)存使用量(單位為bytes/sec)
    node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Cached_bytes - node_memory_Buffers_bytes - node_memory_Slab_bytes

  • 內(nèi)存使用率(單位為percent)
    ((node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Cached_bytes - node_memory_Buffers_bytes - node_memory_Slab_bytes)/node_memory_MemTotal_bytes) * 100

  • server1的內(nèi)存使用率(單位為percent)
    ((node_memory_MemTotal_bytes{instance="server1"} - node_memory_MemAvailable_bytes{instance="server1"})/node_memory_MemTotal_bytes{instance="server1"}) * 100

  • server2的磁盤使用率(單位為percent)
    ((node_filesystem_size_bytes{fstype=~"xfs|ext4",instance="server2"} - node_filesystem_free_bytes{fstype=~"xfs|ext4",instance="server2"}) / node_filesystem_size_bytes{fstype=~"xfs|ext4",instance="server2"}) * 100

  • uptime時(shí)間(單位為seconds)
    time() - node_boot_time

  • server1的uptime時(shí)間(單位為seconds)
    time() - node_boot_time_seconds{instance="server1"}

  • 網(wǎng)絡(luò)流出量(單位為bytes/sec)
    irate(node_network_transmit_bytes_total{device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m]) > 0

  • server1的網(wǎng)絡(luò)流出量(單位為bytes/sec)
    irate(node_network_transmit_bytes_total{instance="server1", device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m]) > 0

  • 網(wǎng)絡(luò)流入量(單位為bytes/sec)
    irate(node_network_receive_bytes_total{device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m]) > 0

  • server1的網(wǎng)絡(luò)流入量(單位為bytes/sec)
    irate(node_network_receive_bytes_total{instance="server1", device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m]) > 0

  • 磁盤讀取速度(單位為bytes/sec)
    irate(node_disk_read_bytes_total{device=~"sd.*"}[5m])

歡迎關(guān)注我的個人公眾號:JAVA日知錄

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末红柱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驱敲,老刑警劉巖系奉,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懦鼠,死亡現(xiàn)場離奇詭異,居然都是意外死亡览徒,警方通過查閱死者的電腦和手機(jī)颂龙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來措嵌,“玉大人,你說我怎么就攤上這事枫慷±斯妫” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵笋婿,是天一觀的道長。 經(jīng)常有香客問我找御,道長绍填,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任讨永,我火速辦了婚禮,結(jié)果婚禮上揭糕,老公的妹妹穿的比我還像新娘锻霎。我一直安慰自己,他們只是感情好旋恼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著产徊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舟铜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天塘娶,我揣著相機(jī)與錄音痴荐,去河邊找鬼血柳。 笑死生兆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的根吁。 我是一名探鬼主播合蔽,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拴事!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起衡瓶,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤牲证,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坦袍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛮放,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年奠宜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缝其。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徘六。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡榴都,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嘴高,到底是詐尸還是另有隱情,我是刑警寧澤春瞬,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布套啤,位于F島的核電站,受9級特大地震影響潜沦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唆鸡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一争占、第九天 我趴在偏房一處隱蔽的房頂上張望燃逻。 院中可真熱鬧臂痕,春花似錦、人聲如沸刻蟹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽英古。三九已至,卻和暖如春召调,著一層夾襖步出監(jiān)牢的瞬間蛮浑,已是汗流浹背只嚣。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留册舞,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓盛杰,卻偏偏與公主長得像藐石,于是被迫代替她去往敵國和親即供。 傳聞我的和親對象是個殘疾皇子于微,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容