为什么需要收集告警信息
问题1、在zabbix问题中,超过1000条记录时,显示的总量为999,具体数量就不可知了,那我们经常要做报告,1年多少次告警。
问题2、分类不可统计,我们的主机组少的有7-8个,多的10+、20+,那么多如何像使用sql group by一样快速的一张表呈现如:
主机组 | 主机 | 故障次数 |
问题3、告警内容不可自定义,在问题界面中,我们看到的是如下所示,那我告警的想加个主机组这一列不过分吧,这个按照官方指导还要修改源码,太耗时间了。
时间 | 严重性 | 信息 | 主机 | 问题 | 最新值 | 持续时间 | 确认 | 动作 | 标记 |
问题4、当告警的时候,告警值很重要,这个在如果在zabbix上要去历史上翻找,相当麻烦,在问题中显示的又是当前的最新值,没有意义,所以这个需要采集。
问题5、当遇到大量告警喷发的时候,不管是发邮件、短信、钉钉都能让你头脑爆炸,更别说领导了。
以上几个问题都是我在生出中经常碰到的问题,所以生出了告警信息的统一管理的念头,想到就干。
告警统计架构
这整体流程如下:
1、当zabbix触发告警,会调用zabbix 告警动作;
2、zabbix 告警动作会触发zabbix server上的kafka发送信息脚本;
3、告警信息会发送至kafka server;
4、kafka 消费脚本会拉去kafka server中的告警信息,存入mysql;
几个关键设置点
1、告警的内容,这个解答 上面问题3 ,在zabbix web上 配置动作
告警信息设置
{"eventid":"jty{EVENT.ID}","group":"{TRIGGER.HOSTGROUP.NAME}","host":"{HOSTNAME1}","ip":"{HOST.IP}","alarm_time":"{EVENT.DATE} {EVENT.TIME}","trigger_name":"{TRIGGER.NAME}","alarm_value":"{ITEM.LASTVALUE}","alarm_type":"alarm","alarm_level":"{TRIGGER.SEVERITY}","description":"{HOST.DESCRIPTION}"}
恢复信息设置
{"eventid":"jty{EVENT.ID}","recover_time":"{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}","recover_value":"{ITEM.LASTVALUE}","alarm_type":"recover"}
2、告警的脚本和传参
脚本名称:kafka_Producer #这个脚本放在/usr/lib/zabbix/alertscripts/kafka_Producer
脚本参数:
kafka1:9092 #这里是在hosts中做个解析,是kafka server的地址
zabbixVm #这个是消费topic,相当于一个key
{ALERT.MESSAGE} #这个是消息的内容。
关于脚本和源码都放在
https://gitee.com/fangfhm/Enterprise-zabbix-monitoring/tree/master/zabbix-kafka
数据库告警效果