依据前面文章《Zabbix 5.0 LTS URL 健康监测》环境,实现企业微信(Webhook)自动发送告警信息。
一、创建企业微信机器人
-
先在自己的企业微信群里创建一个机器人,并获取其 WebHook 地址。右击群聊天卡片,添加群机器人。
获得一个类似下图的 WebHook 地址。注意,这个 WebHook 地址非常重要,请不要泄露。# key 的值是唯一的 https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=b55ed8ad-6765-4e8b-827c-xxxxxxxxxx
二、创建媒介
步骤:配置 -- 报警媒介类型 -- 创建媒介类型 -- 添加
脚本内容(固定样式)
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 + ".";
}
三、创建动作
步骤:配置 -- 动作 -- 新的触发条件 -- 添加
Custom message
故障信息:{TRIGGER.STATUS}服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}恢复信息:{EVENT.NAME}服务器: {HOST.NAME}发生:{EVENT.NAME}故障恢复!
告警主机: {HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}更新信息:{EVENT.NAME}服务器: {HOST.NAME}发生:{EVENT.NAME}故障更新!
告警主机: {HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
四、配置用户
验证结果
Web场景-- 步骤 -- 故意写错URL触发告警