zabbix告警收敛/合并/压缩
由于报警短信、邮件太多导致运维人员精神高度紧张、时间长了容易忽略重要告警,引起不必要的麻烦。为了解决这个问题针对Zabbix告警做了二次开发,目前该代码已应用于我们公司环境中三年以上。
下面为大家分享下整体的流程以及代码。
一、架构图
①产生的所有告警均由zabbix
的actions
调用脚本推入缓存redis
当中;
②脚本将每分钟(crontab
)去redis
中拉取数据,根据定义好的一系列规则进行分析、合并;
③根据预先定义好的规则将报警通过定义好的方式发送给相关人员;
二、设置Zabbix
1. 配置Media types
- 仅传递
subject
- 我这里定义了
3个Mediatype
分别用于发送邮件、短信、企业微信(具体可自行调整) (3个除了Name不一样之外其他配置(Script name
/Script parameters
)保持一致) - 脚本 “
zabbix-police/police.py
” 主要功能是将Subject(Eventid)写入Redis
,后面会写到
2. 配置Actions
- 我这里以每个
Trigger severity
一个Actions
举例。(可以根据不同的HostGroup或者其他条件自行配置多个actions) Default subject
之所以用 “{EVENT.ID}_1、{EVENT.ID}_0
“为的是保持唯一性,1代表故障、0代表恢复- Default sbject
{EVENT.ID}_1
- Default message
triggervalue|{TRIGGER.VALUE}
hostname|{HOSTNAME1}
ipaddress|{IPADDRESS}
hostgroup|{TRIGGER.HOSTGROUP.NAME}
triggerstatus|{TRIGGER.STATUS}
triggerseverity|{TRIGGER.SEVERITY}
triggername|{TRIGGER.NAME}
triggerkey|{TRIGGER.KEY1}
triggeritems|{ITEM.NAME}
itemvalue|{ITEM.VALUE}
eventid|{EVENT.ID}
action|{ACTION.NAME}
eventage|{EVENT.AGE}
eventtime|{EVENT.DATE} {EVENT.TIME} - Recovery subject
{EVENT.ID}_0
- Recovery message
triggervalue|{TRIGGER.VALUE}
hostname|{HOSTNAME1}
ipaddress|{IPADDRESS}
hostgroup|{TRIGGER.HOSTGROUP.NAME}
triggerstatus|{TRIGGER.STATUS}
triggerseverity|{TRIGGER.SEVERITY}
triggername|{TRIGGER.NAME}
triggerkey|{TRIGGER.KEY1}
triggeritems|{ITEM.NAME}
itemvalue|{ITEM.VALUE}
eventid|{EVENT.ID}
action|{ACTION.NAME}
eventage|{EVENT.AGE}
eventtime|{EVENT.DATE} {EVENT.TIME}
三、配置 Zabbix 服务器
1. 安装环境
#下载代码 |
2. 脚本
#文件分布 |
3. Crontab
[root@zabbix-server01 zabbix-police]$ crontab -l |