当前位置:首页 » 《随便一记》 » 正文

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

20 人参与  2024年10月26日 08:03  分类 : 《随便一记》  评论

点击全文阅读


一、前提条件

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>

 三、报警用户配置

选择你创建的告警媒介

四、配置告警动作

设置动作规则

设置动作操作。

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

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


点击全文阅读


本文链接:http://zhangshiyu.com/post/177779.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1