grafana+alertmanager 微信報警發送給不同告警人

需求

grafana+elk+alertmanager實現微信報警到不同部門或不同告警人。

簡介

grafana+alertmanager實現微信報警 這篇文章中詳述了grafana+alertmanager的微信報警實現過程。

alertmanager默認情況下告警接收人爲wechat,也就是默認對test1發送微信告警,沒有將報警分類。

vim grafana.yml
global:
  resolve_timeout: 5m

templates:
- '/usr/local/alertmanager/wechat.tmpl'

route:
  group_by: ['alertname']
  group_wait: 5m
  #group_wait: 1m
  #同一組內警報,等待group_interval時間後,再繼續等待repeat_interval時間
  group_interval: 10m
  #group_interval: 1m
  #當group_interval時間到後,再等待repeat_interval時間後,才進行報警
  repeat_interval: 1h
  #repeat_interval: 1m
  receiver: 'wechat'
receivers:
- name: 'wechat'
  wechat_configs:
  - corp_id: 'wwbba179b20d372e'
    agent_id: '1000005'
    api_secret: '-CJ9QLEFxLzxt-NWYOLuy-RuX3I'
    to_user: 'test1'
    send_resolved: true

問題

此時,如果我們對elk的index分組,併發給不同的接收人,如:web、api,怎麼實現?

1.先來看下grafana發送到alertmanager告警信息

alertname='xxx流量告警'
description='xxx每分鐘訪問量超過15000'
summary='xxx流量告警'
metric='Count'

我們可以通過訪問alertmanager的web頁面查看,如http://10.10.10.22:9093。

在alertmanager中,對alertname進行分組;description和summary是具體報警內容;而metric是標籤,即label。

要想實現分組,alertmanager需要根據label進行設置子路由,通過匹配label發送給不同的接收人。

2.設置子路由

通過routes設置子路由,子路由中設置不同的接收人。

vim grafana.yml
global:
  resolve_timeout: 5m

templates:
- '/usr/local/alertmanager/wechat.tmpl'

route:
  group_by: ['alertname']
  group_wait: 5m
  #group_wait: 1m
  #同一組內警報,等待group_interval時間後,再繼續等待repeat_interval時間
  group_interval: 10m
  #group_interval: 1m
  #當group_interval時間到後,再等待repeat_interval時間後,才進行報警
  repeat_interval: 1h
  #repeat_interval: 1m
  receiver: 'wechat'
  #子路由
  routes:
  - receiver: 'wechat_web'
    match_re:
      department: 'web'
  - receiver: 'wechat_api'
    match_re:
      department: 'api'
receivers:
- name: 'wechat'
  wechat_configs:
  - corp_id: 'wwbba179b20d372e'
    agent_id: '1000005'
    api_secret: '-CJ9QLEFxLzxt-NWYOLuy-RuX3I'
    to_user: 'test1'
    send_resolved: true
- name: 'wechat_web'
  wechat_configs:
  - corp_id: 'wwbba179b20d372e'
    agent_id: '1000005'
    api_secret: '-CJ9QLEFxLzxt-NWYOLuy-RuX3I'
    to_user: 'test2'
    send_resolved: true
- name: 'wechat_api'
  wechat_configs:
  - corp_id: 'wwbba179b20d372e'
    agent_id: '1000005'
    api_secret: '-CJ9QLEFxLzxt-NWYOLuy-RuX3I'
    to_user: 'test3'
    send_resolved: true

3.amtool 調試

#觸發web報警
./amtool --alertmanager.url=http://10.10.10.22:9093 alert add department=web alertname="xxx流量告警"        --annotation=description='xxx每分鐘訪問量超過15000'  --annotation=summary = "xxx流量告警"
#觸發api報警
./amtool --alertmanager.url=http://10.10.10.22:9093 alert add department=api alertname="xxx流量告警"        --annotation=description='xxx每分鐘訪問量超過15000'  --annotation=summary = "xxx流量告警"

通過這種方式,我們可以在排除grafana的情況下,模擬測試alertmanager觸發報警。

4.grafana設置label

由於我們使用的是grafana5.4 ,查看官方文檔All supported notifiers
在這裏插入圖片描述從上圖看出報警通道爲prometheus+alertmanager 是支持發送圖片和報警標籤(對應alertmanager中的label),但是是從6.3+開始。

也就是說grafana5.4 是不支持報警標籤,因此無法設置label;因此我們需要將grafana升級到6.3以上。
升級過程需要測試,以免丟失數據。

兩個版本的對比如下:

grafana-5.4 告警信息配置:
grafana-5.4 告警信息配置
grafana-6.5 告警信息配置:
grafana-6.5 告警信息配置
通過上圖區別,可明顯看出6.5 比 5.4 的多出了一個alert tag的功能,即對應alertmanger的label。如下:
在這裏插入圖片描述
使用grafana-5.4 默認展示一個label:metric
使用grafana-6.5 可以展示兩個label:department和metric,而metric是用於elk的統計量;department是我們用於區分發送給不同部門和報警人的,alertmanger正式通過這個手動添加的label來匹配不同的子路由,發給不同的報警人。

發佈了179 篇原創文章 · 獲贊 299 · 訪問量 61萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章