四、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>
三、报警用户配置
选择你创建的告警媒介
四、配置告警动作
设置动作规则
设置动作操作。
整个逻辑就是告警动作匹配告警媒介与用户,然后进行告警的发送。
用户里面需要有使用媒介的权限和时间。大概就这个意思
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。