Zabbix 5.0 企业微信机器人故障文本告警
2020 年 5 月,zabbix 发布了 5.0LTS 版,这个版本从界面到功能都有了很大的提升。大家可以通过Zabbix 5.0 LTS released了解新版本的特性。
新版本的 Zabbix 对于告警(报警媒介)进行了扩展和优化,可以直接支持 WebHook 类型的报警媒介。我们再开发企业微信机器人可以直接通过 JavaScript 语言编写脚本,因为得到了 Zabbix 的原生支持,告警脚本通用性强且更加灵活。
本文我将分享一下,如何通过 Zabbix 报警媒介在企业微信发送告警信息。
注册企业微信机器人
首先我们需要先在自己的企业微信群里创建一个机器人,并获取其 WebHook 地址。右击群聊天卡片,添加群机器人。
[图片: 添加群机器人]
https://static.txisfine.cn/upload/20200829214142.png/pkwatermark
[图片: 获得 WebHook 地址]
https://static.txisfine.cn/upload/20200829214637.png/pkwatermark
创建告警媒介
登录 Zabbix,依次选择“管理”、“报警媒介类型”、“创建媒体类型”。名称随意,只要能起到一个标识作用即可。媒介类型选择WebHook,参数按下表填写。
| 名称 | 值 | | ------- | --------------- | | Message | {ALERT.MESSAGE} | | Subject | {ALERT.SUBJECT} | | Key | Your Bot Key |
这里的 Key 就是刚刚注册机器人时候生成的 WebHook 地址末尾的 Key,例如你的地址是https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=574c6d4e-544c-4baf-ae9a-b935dbc1be46,则这里你需要填写574c6d4e-544c-4baf-ae9a-b935dbc1be46。
脚本可以参考如下的代码段。直接复制到脚本代码框中即可。
```var Qiyeweixin = {
key: null,
message: null,
msgtype: "markdown",
proxy: null,
sendMessage: function () {
var params = {
msgtype: Qiyeweixin.msgtype,
markdown: {
content: Qiyeweixin.message,
},
},
data,
response,
request = new CurlHttpRequest(),
url =
"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=" +
Qiyeweixin.key;
if (Qiyeweixin.proxy) {
request.setProxy(Qiyeweixin.proxy);
}
request.AddHeader("Content-Type: application/json");
data = JSON.stringify(params);
// Remove replace() function if you want to see the exposed key in the log file.
Zabbix.Log(
4,
"[Qiyeweixin Webhook] URL: " + url.replace(Qiyeweixin.key, "<BOT KEY>")
);
Zabbix.Log(4, "[Qiyeweixin Webhook] params: " + data);
response = request.Post(url, data);
Zabbix.Log(4, "[Qiyeweixin Webhook] HTTP code: " + request.Status());
try {
response = JSON.parse(response);
} catch (error) {
response = null;
}
if (request.Status() !== 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';
}
Qiyeweixin.key = params.Key;
if (params.HTTPProxy) {
Qiyeweixin.proxy = params.HTTPProxy;
}
Qiyeweixin.to = params.To;
Qiyeweixin.message = params.Subject + "\n" + params.Message;
Qiyeweixin.sendMessage();
return "OK";
} catch (error) {
Zabbix.Log(4, "[Qiyeweixin Webhook] notification failed: " + error);
throw "Sending failed: " + error + ".";
}
```
超时给 10s 即可。最后配置完成后,应该是如下图的样子。
[图片: 报警媒介类型页面]
https://static.txisfine.cn/upload/20200829220137.png/pkwatermark
[图片: 消息模板]
https://static.txisfine.cn/upload/20200829220614.png/pkwatermark
- 标题(支持 1 至 6 级标题,注意#与文字中间要有空格)
- 加粗
- 链接
- 行内代码段(不支持跨行)
- 引用
- 字体颜色(有三种内置颜色)
测试告警媒介
编辑完成,点击“添加”,回到报警媒介类型页面。找到刚刚添加的报警媒介,在动作栏下面对应位置点击“测试”。
[图片: 测试企业微信 WebHook 消息]
https://static.txisfine.cn/upload/20200829221257.png/pkwatermark
[图片: 发送测试消息]
https://static.txisfine.cn/upload/20200829221510.png/pkwatermark
[图片: 测试告警媒介成功]
https://static.txisfine.cn/upload/20200829221730.png/pkwatermark
配置通知消息
到现在,就已经成功开发了一个企业微信告警机器人,现在我们要把他配置到通知消息里。 首先对用户配置告警媒介。如下图,你也可以选择启动机器人的时间段,比如我要 7x24 小时盯着网络设备,这里直接 007 就好了。
[图片: 对用户配置告警媒介]
https://static.txisfine.cn/upload/20200829222033.png/pkwatermark
[图片: 配置动作]
https://static.txisfine.cn/upload/20200829222333.png/pkwatermark
[图片: 收到的告警信息]
https://static.txisfine.cn/upload/20200829222544.png/pkwatermark