1. 程式人生 > >zabbix 告警設計

zabbix 告警設計

告警設計

  • 通過zabbix api 查詢報警資訊 (已實現)
  • 通過查詢sql 查詢告警資訊 然後通過轉發實現訊息推送( 重新定義一個數據庫,使用觸發器把zabbix資料庫中的告警資料同步到新庫,查詢新庫和平臺對接)
  • 重寫原始碼介面
  • 改寫原始碼的訊息傳送方式.

與平臺對接用的 requests 模組 傳送URL

具體實現

  1. 方案一 通過zabbix api 查詢報警資訊 (已實現)

  2. 方案二 通過查詢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 ;
    
  3. 方案三 重寫原始碼介面
    還沒有找到具體的收集告警的程式碼, (收集資料是在 zabbix_agent 主動向zabbix_server 傳送資訊)
    actions.c 在查詢資料庫後,把響應的改動重新寫入 資料庫中
    alers.c 主要是看到 傳送告警的幾種方式

  4. 方案四 改寫原始碼的訊息傳送方式.
    在 zabbix-3.4.11\src\zabbix_server\alerter\alerter.c 增加 一個傳送方式, 資料庫 表 media_type 新增一中傳送方式 (類似指令碼)