需求
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-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來匹配不同的子路由,發給不同的報警人。