四、zabbix7.0推送告警至钉钉webhook机器人

一、前提条件

1、zabbix服务器能够访问钉钉的服务器,具体说是能访问https://oapi.dingtalk.com/robot/send

 2、钉钉的webhook是有安全要求的,我采用的是ip的方式,我的zabbix服务器在内网,我的网络出口有多个固定公网ip,所以这样做省事,其他方式也可以你自己考虑。下图是webhook机器人的配置。

二、zabbix7配置报警媒介以及消息模板配置

告警----媒介---创建媒介类型

这一步,参数里面默认的跟我下图里不一样的,按我下图修改。Key是你的webhook机器人地址里的access_token=后面的内容。

脚本内容如下

var dingding = {
  key: null,
  message: null,
  msgtype: "markdown",
  proxy: null,

  // 发送消息的函数
  sendMessage: function () {
    var params = {
      msgtype: dingding.msgtype,
      markdown: {
        title: "网络设备告警", // 消息的标题
        text: dingding.message // 消息的内容
      },
    };

    // 钉钉的Webhook URL
    var url = "https://oapi.dingtalk.com/robot/send?access_token=" + dingding.key;

    // 创建一个新的HttpRequest对象
    var request = new HttpRequest();
    if (dingding.proxy) {
      request.setProxy(dingding.proxy); // 设置代理,如果有的话
    }

    // 设置请求头
    request.addHeader("Content-Type: application/json");
    var data = JSON.stringify(params); // 将参数转换为JSON字符串

    // 记录URL日志,替换掉key以保护隐私
    Zabbix.Log(4, "[dingding Webhook] URL: " + url.replace(dingding.key, "<BOT KEY>"));
    Zabbix.Log(4, "[dingding Webhook] params: " + data);

    // 发送POST请求
    var response = request.post(url, data);
    Zabbix.Log(4, "[dingding Webhook] HTTP code: " + request.getStatus());

    try {
      response = JSON.parse(response); // 解析响应
    } catch (error) {
      response = null;
    }

    // 检查响应状态和错误码
    if (request.getStatus() !== 200 || response.errcode !== 0) {
      if (typeof response.errmsg === "string") {
        throw response.errmsg; // 抛出错误信息
      } else {
        throw "Unknown error. Check debug log for more information."; // 抛出未知错误
      }
    }
  },
};

try {
  // 解析传入的参数
  var params = JSON.parse(value);
  if (typeof params.Key === "undefined") {
    throw 'Incorrect value is given for parameter "Key": parameter is missing'; // 检查Key参数
  }
  dingding.key = params.Key;
  if (params.HTTPProxy) {
    dingding.proxy = params.HTTPProxy; // 设置代理
  }
  dingding.message = params.Subject + "\n" + params.Message; // 组合消息内容
  dingding.sendMessage(); // 发送消息
  return "OK";
} catch (error) {
  Zabbix.Log(4, "[dingding Webhook] notification failed: " + error); // 记录错误日志
  throw "Sending failed: " + error + "."; // 抛出发送失败错误
}

消息模板配置如下

问题

主题留空就行了,内容如下:

<font color="comment">主机IP:{HOST.IP}</font>

<font color="comment">告警主机:{HOST.NAME}</font>

<font color="comment">告警时间:{EVENT.DATE} {EVENT.TIME}</font>

<font color="comment">告警等级:{TRIGGER.SEVERITY}</font>

<font color="comment">告警信息:{TRIGGER.NAME}</font>

<font color="comment">当前状态:{TRIGGER.STATUS}</font>

<font color="comment">事件ID:{EVENT.ID}</font>

主题留空,问题回复如下配置: 

<font color="Green">主机IP:{HOST.IP}</font>

<font color="Green">告警主机:{HOST.NAME}</font>

<font color="Green">恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}</font>

<font color="Green">告警等级:{TRIGGER.SEVERITY}</font>

<font color="Green">告警信息:{TRIGGER.NAME}</font>

<font color="Green">当前状态:{TRIGGER.STATUS}</font>

<font color="Green">事件ID:{EVENT.ID}</font>

 三、报警用户配置

选择你创建的告警媒介

四、配置告警动作

设置动作规则

设置动作操作。

整个逻辑就是告警动作匹配告警媒介与用户,然后进行告警的发送。

用户里面需要有使用媒介的权限和时间。大概就这个意思

  • 18
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值