告警设计
- 通过zabbix api 查询报警信息 (已实现)
- 通过查询sql 查询告警信息 然后通过转发实现消息推送( 重新定义一个数据库,使用触发器把zabbix数据库中的告警数据同步到新库,查询新库和平台对接)
- 重写源码接口
- 改写源码的消息发送方式.
与平台对接用的 requests 模块 发送URL
具体实现
- 方案一 通过zabbix api 查询报警信息 (已实现)
- 方案二 通过查询sql 查询告警信息 然后通过转发实现消息推送( 重新定义一个数据库,使用触发器把zabbix数据库中的告警数据同步到新库,查询新库和平台对接) # 添加字段 hostid ## 可以在新库上面拓展字段 # 创建数据库 report 创建表 newevent DROP DATABASE IF EXISTS `report`; CREATE DATABASE report character set utf8; USE report; DROP TABLE IF EXISTS `newevent`; CREATE TABLE `newevent` ( `id` int(11) NOT NULL AUTO_INCREMENT, `host` varchar(128) CHARACTER SET utf8 NOT NULL DEFAULT '', hostid int(11) `triggerid` bigint(20) unsigned NOT NULL, `description` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '', `priority` int(11) NOT NULL DEFAULT '0', `value` int(11) NOT NULL DEFAULT '0', `time` datetime DEFAULT NULL, primary key (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; # 创建触发器 zabbix 库 DELIMITER `$$` DROP TRIGGER IF EXISTS after_insert_on_event; CREATE TRIGGER after_insert_on_event AFTER INSERT ON zabbix.`events` FOR EACH ROW BEGIN INSERT INTO report.newevent ( report.newevent.host, report.newevent.triggerid, report.newevent.description, report.newevent.priority, report.newevent.value, report.newevent.time ) SELECT zabbix.`hosts`.`host`, zabbix.`triggers`.triggerid, zabbix.`triggers`.description, zabbix.`triggers`.priority, zabbix.`events`.`value`, FROM_UNIXTIME(zabbix.`events`.clock) FROM zabbix.`hosts`, zabbix.`triggers`, zabbix.`events`, zabbix.items, zabbix.functions, zabbix.groups, zabbix.hosts_groups WHERE zabbix.`hosts`.hostid = zabbix.hosts_groups.hostid AND zabbix.hosts_groups.groupid = zabbix.groups.groupid AND zabbix.`triggers`.triggerid = zabbix.`events`.objectid AND zabbix.`hosts`.hostid = zabbix.items.hostid AND zabbix.items.itemid = zabbix.functions.itemid AND zabbix.functions.triggerid = zabbix.`triggers`.triggerid AND zabbix.`events`.eventid=new.eventid; END; $$ DELIMITER ;
- 方案三 重写源码接口 还没有找到具体的收集告警的代码, (收集数据是在 zabbix_agent 主动向zabbix_server 发送信息) actions.c 在查询数据库后,把响应的改动重新写入 数据库中 alers.c 主要是看到 发送告警的几种方式
- 方案四 改写源码的消息发送方式. 在 zabbix-3.4.11srczabbix_serveralerteralerter.c 增加 一个发送方式, 数据库 表 media_type 添加一中发送方式 (类似脚本)