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

Z.master 2024-07-21 10:33:01 阅读 58

一、前提条件

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

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

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

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

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

脚本内容如下

<code>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");code>

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 + "."; // 抛出发送失败错误

}

消息模板配置如下

问题

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 三、报警用户配置

选择你创建的告警媒介

四、配置告警动作

设置动作规则

设置动作操作。

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

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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。