背景
在多個運維技術分享中都會談及到“告警風暴”這個詞,即在大規模網絡發生異常的時候,報警量激增,運維伙伴手機在1個多小時中不斷的接受報警通知,這樣有可能會造成“狼來了”等一系列的問題,不但對運維人員造成了困擾,給排查問題帶了不小的難度。
收斂方案
- 所有產生告警均由zabbix調用腳本推入緩存redis當中
- 分析系統將在規定時間(1分鍾)內去redis中拉取數據,根據定義好的一系列規則進行,合並、分析或直接丟棄,並存入分析平台數據庫,以便供歷史查詢。
- 根據預先定義好的規則將報警通過定義好的方式發送給相關人員。
Zabbix 配置
Actions 配置
對Actions進行特殊設置,Default subject極為重要,是識別收斂的標示。
Default subject
{EVENT.ID}_1
Default message
triggervalue|1#hostname|{HOSTNAME1}#ipaddress|{IPADDRESS}#hostgroup|{TRIGGER.HOSTGROUP.NAME}#triggernseverity|{TRIGGER.NSEVERITY}#triggername|{TRIGGER.NAME}#triggerkey|{TRIGGER.KEY1}#triggeritems|{ITEM.NAME}#itemvalue|{ITEM.VALUE}#eventid|{EVENT.ID}
Recovery subject
{EVENT.ID}_0
Recovery message
triggervalue|0#hostname|{HOSTNAME1}#ipaddress|{IPADDRESS}#hostgroup|{TRIGGER.HOSTGROUP.NAME}#triggernseverity|{TRIGGER.NSEVERITY}#triggername|{TRIGGER.NAME}#triggerkey|{TRIGGER.KEY1}#triggeritems|{ITEM.NAME}#itemvalue|{ITEM.VALUE}#eventid|{EVENT.ID}
Media 配置
police.py--報警函數:zabbix告警是調用此函數,將事件id推入redis。
/usr/local/zabbix/share/zabbix/alertscripts/police.py
#!/usr/bin/env python
#coding:utf-8
import redis
import sys
subject=sys.argv[1]
# 需要修改為對應的redis主機
r = redis.StrictRedis(host="********", password="123456", port=6379)
print subject
r.set(subject,subject)
環境安裝
- 安裝pip
- 安裝redis
#安裝python、mysql、redis模塊
pip install redis
pip install mysql-python
yum install gcc python-devel
腳本部署
├── police
│ ├── dbread.py --- 據庫查詢函數:接收事件id參數,將zabbix數據庫內的數據切割分片並返回告警信息
│ ├── allpolice.py --- 綜合函數:將①②③整合起來,定時每1分鍾執行一次
│ ├── operation.py --- 操作函數:接收dbread.py返回的告警信息,進行告警合並,告警壓縮處理。並返回處理結果
│ └── weixin.py --- 發送微信告警通知函數:將處理結果發送至指定運維人員
│ └── config.py --- 配置信息
├── police.py --- 報警函數:zabbix告警是調用此函數,將事件id推入redis。
定時任務
# 告警收斂
*/1 * * * * /usr/bin/python /usr/lib/zabbix/alertscripts/police/allpolice.py >> /usr/lib/zabbix/alertscripts/police/send.log 2>&1