«

实现zabbix 企业微信机器人webhook告警脚本的配置

时间:2025-2-28 16:47     作者:Anglei     分类: 自动化运维


企业微信作为企业内部沟通的重要工具,其群聊机器人功能为信息的自动化推送提供了可能。通过配置Zabbix与企业微信机器人的Webhook告警脚本,企业可以实现当监控系统检测到异常或故障时,自动将告警信息发送到指定的企业微信群聊中,从而极大地提高了故障响应的速度和效率。

企业微信机器人的添加,并获取webhook地址

获取Webhook地址

创建报警媒介

并设置参数

Subject                {ALERT.SUBJECT}
Message                {ALERT.MESSAGE}
To                     {ALERT.SENDTO}         (机器人webhook,此处使用变量)

设置消息模板

消息类型:问题

主题:
<font color="warning">**{EVENT.NAME}**</font>
消息:
**主机**:{HOST.NAME}
**IP**:{HOST.IP}
**状态**:<font color="warning">🥹告警</font>
**告警值**:{EVENT.OPDATA}
**告警等级**:{EVENT.SEVERITY}
**问题描述**:{TRIGGER.DESCRIPTION}
**持续时间**:{EVENT.DURATION}
**告警时间**:{EVENT.DATE} {EVENT.TIME}

消息类型:问题恢复

主题:
<font color="info">{EVENT.NAME}</font>
消息:
**主机**:{HOST.NAME}
**IP**:{HOST.IP}
**状态**:<font color="info">😀 恢复</font>
**告警值**:{EVENT.OPDATA}
**告警等级**:{EVENT.SEVERITY}
**问题描述**:{TRIGGER.DESCRIPTION}
**持续时间**:{EVENT.DURATION}
**告警时间**:{EVENT.DATE} {EVENT.TIME}
**恢复时间**:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}

添加webhook脚本

try {
    // 实例化参数
    var params = JSON.parse(value),  // 从 Zabbix 获取传递的参数
        req = new HttpRequest(),      // 创建一个 HTTP 请求实例
        msg = {
            "msgtype": "markdown",
            "markdown": {
                "content": generateMessage(params.Subject, params.Message)
            }
        };

    // 判断是否需要配置 HTTP 代理
    if (params.HTTPProxy) {
        req.setProxy(params.HTTPProxy);
    }

    // 添加 header 头变量
    req.addHeader('Content-Type: application/json');

    // 发送 HTTP POST 请求,格式:req.post(url, data)
    var resp = req.post(params.To, JSON.stringify(msg));

    // 判断 HTTP 请求返回的状态码,非 200 则抛出异常
    if (req.getStatus() != 200) {
        Zabbix.log(Zabbix.LOG_LEVEL_ERROR, 'Response code: ' + req.getStatus());
        throw 'Response code: ' + req.getStatus();
    }

    // 返回响应结果
    resp = JSON.parse(resp);
    return JSON.stringify(resp);
} catch (error) {
    Zabbix.log(Zabbix.LOG_LEVEL_ERROR, 'Failed with error: ' + error);
    throw 'Failed with error: ' + error;
}

// 用于生成告警消息的函数
function generateMessage(Subject, Message) {
    // 当前时间,调整为北京时间
    var currentDate = new Date();
    var currentTimeInUTC = currentDate.getTime();
    var currentTimeInBeijing = new Date(currentTimeInUTC + 8 * 60 * 60 * 1000); // 加 8 小时 (毫秒)
    var formattedCurrentTime = currentTimeInBeijing
      .toISOString()
      .replace('T', ' ')
      .replace('Z', '')
      .slice(0, -4)
      .replace(/-/g, '.');

    var message = Subject + "\n" + Message + "\n**当前时间**:" + formattedCurrentTime;
    var message = message.replace('Not classified', '未分类').replace('Information', '信息').replace('Warning', '警告').replace('Average', '一般严重').replace('High', '严重').replace('Disaster', '灾难')

    return message;
}

为用户关联报警媒介

创建测试触发器

告警效果

写在最后

至此我们就完成了zabbix 企业微信机器人webhook的告警设置。
除了企业微信外,我们可以通过webhook快速添加其他告警通道,比如飞书、钉钉。我们将在后续的文章中继续展开。

本文完结,相关标签: zabbix 告警 webhook

 版权所有:Anglei
 文章标题:实现zabbix 企业微信机器人webhook告警脚本的配置
 除非注明,本站文章如未特殊说明均为 MAXADA社区知识库 原创,且版权所有,请勿用于任何商业用途。

推荐阅读:

看完后感想如何?

路过(0)

雷人(0)

握手(1)

鲜花(0)

鸡蛋(0)
分享到: