Cheug's Blog

当前位置:网站首页 / 技术积累 / 正文

Zabbix7.4实现钉钉告警-内置(JavaScript)脚本

2025-12-25 / 技术积累 / 26 次围观 / 0 次吐槽 /

第一步:获取钉钉机器人 Webhook 地址

  1. 进入钉钉群 -> 智能群助手 -> 添加机器人 -> 自定义

  2. 安全设置建议勾选:加签(本脚本支持)或 自定义关键词(如:告警)。

  3. 复制生成的 Webhook URLSecret

第二步:在 Zabbix 中创建 Webhook

  1. 登录 Zabbix,前往 告警 (Alerts) -> 媒介类型 (Media types)

  2. 点击 创建媒介类型 (Create media type)

  3. 名称 (Name): DingDing Webhook

  4. 类型 (Type): Webhook

  5. 参数 (Parameters):添加以下必需项:

参数名
URL(粘贴你的钉钉 Webhook 地址)
Secret(粘贴你的加签密钥)
Subject{ALERT.SUBJECT}
Message{ALERT.MESSAGE}

       脚本 (Script):粘贴以下代码:

try {
    var params = JSON.parse(value),
        req = new HttpRequest(),
        data,
        response,
        sha256,
        timestamp = new Date().getTime(),
        url = params.URL;
    // 处理钉钉加签逻辑
    if (params.Secret && params.Secret.length > 0) {
        var stringToSign = timestamp + "\n" + params.Secret;
        var sign = btoa(Zabbix.hmac('sha256', params.Secret, stringToSign));
        url += '&timestamp=' + timestamp + '&sign=' + encodeURIComponent(sign);
    }
    req.addHeader('Content-Type: application/json');
    // 组装钉钉 markdown 消息
    data = {
        msgtype: "markdown",
        markdown: {
            title: params.Subject,
            text: "## " + params.Subject + "\n" + params.Message
        }
    };
    response = req.post(url, JSON.stringify(data));
    if (req.getStatus() !== 200) {
        throw 'Response code: ' + req.getStatus();
    }
    return 'OK';
} catch (error) {
    Zabbix.log(4, '[DingDing Webhook] Error: ' + error);
    throw 'Sending failed: ' + error;
}

第三步:设置告警消息内容

在同一页面的 消息模板 (Message templates) 标签页中,添加以下模板以确保钉钉显示美观。

1. 问题 (Problem)

  • 主题: 告警发现: {EVENT.NAME}

  • 消息内容:

**告警级别**: {EVENT.SEVERITY}
**告警时间**: {EVENT.DATE} {EVENT.TIME}
**告警主机**: {HOST.NAME}
**告警详情**: {EVENT.NAME}
**当前状态**: {EVENT.VALUE}
**事件 ID**: {EVENT.ID}

2. 问题恢复 (Problem recovery)

  • 主题: 告警恢复: {EVENT.NAME}

  • 消息内容:

**恢复时间**: {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
**告警主机**: {HOST.NAME}
**持续时间**: {EVENT.DURATION}
**当前状态**: 已恢复

第四步:关联用户与测试

  1. 前往 用户 (Users) -> 用户 (Users),选择一个管理员用户。

  2. 报警媒介 (Media) 标签页中,点击添加:

    • 类型: DingDing Webhook

    • 收件人: 随便填(Webhook 模式下不生效,但必填)

  3. 前往 告警 (Alerts) -> 动作 (Actions) -> Trigger actions

    1. 找到负责推送告警的动作(通常叫 "Report problems to admins")启用。

    2. 操作 (Operations) 标签页中,确认:

      1. 发送到用户 (Send to users):包含了你关联了钉钉媒介的那个用户。

      2. 仅送到 (Send only to):选择了 DingDing Webhook(或者 All)。

  4. 测试:在媒介类型列表中,点击刚才创建的 DingDing Webhook 后方的 测试 (Test),输入你的 URL 和 Secret,查看钉钉群是否收到消息。


Powered By Cheug's Blog

Copyright Cheug Rights Reserved.