zabbix 告警收敛

背景

在多个运维技术分享中都会谈及到“告警风暴”这个词,即在大规模网络发生异常的时候,报警量激增,运维伙伴手机在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)

环境安装

#安装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

最终效果

posted @ 2020-05-31 11:12  GeminiMp  阅读(3126)  评论(0编辑  收藏  举报