zabbix 推送企业微信告警

  1. 流程概述
  2. 企业微信配置
  3. zabbix 添加报警媒介类型
  4. zabbix 添加告警触发动作
  5. zabbix 添加用户告报警媒介
  6. 测试

环境

zabbix 版本 6.0

流程概述

  1. 企业微信添加群机器人
  2. zabbix 添加报警媒介类型 WeChat
  3. zabbix 添加告警触发动作
  4. zabbix 修改用户告报警媒介
  5. 测试

企业微信配置

首先在企业微信群里面添加一个群机器人,添加后,会给一个HTTPS的地址,类似这样

https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa

后面的一串key就是webhookkey,后面会用到

zabbix 添加报警媒介类型

管理 -> 报警媒介类型 -> 创建报警媒介类型

  1. 报警媒介类型配置

按照上面的进行配置,其中有个Token 参数,这里使用的是全局宏,一会进行定义。

脚本内容如下,复制进去即可

var Wechat = {
    token: null,
    to: null,
    message: null,
    parse_mode: null,

sendMessage: function() { var params = { msgtype: "markdown", chat_id: Wechat.to, markdown: { content:Wechat.message }, disable_web_page_preview: true, disable_notification: false }, data, response, request = new CurlHttpRequest(), url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=' + Wechat.token;
if (Wechat.parse_mode !== null) { params['parse_mode'] = Wechat.parse_mode; }
request.AddHeader('Content-Type: application/json'); data = JSON.stringify(params);
// Remove replace() function if you want to see the exposed token in the log file. Zabbix.Log(4, '[Wechat Webhook] URL: ' + url.replace(Wechat.token, '<TOKEN>')); Zabbix.Log(4, '[Wechat Webhook] params: ' + data); response = request.Post(url, data); Zabbix.Log(4, '[Wechat Webhook] HTTP code: ' + request.Status()); Zabbix.Log(4, '[Wechat Webhook] response: ' + response);
try { response = JSON.parse(response); } catch (error) { response = null; Zabbix.Log(4, '[Wechat Webhook] response parse error'); }
if (request.Status() !== 200 || response.errcode !== 0 || response.errmsg !== 'ok') { 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.Token === 'undefined') { throw 'Incorrect value is given for parameter "Token": parameter is missing'; }
Wechat.token = params.Token;
if (['Markdown', 'HTML', 'MarkdownV2'].indexOf(params.ParseMode) !== -1) { Wechat.parse_mode = params.ParseMode; }
Wechat.to = params.To; Wechat.message = params.Subject + '\n' + params.Message; Wechat.sendMessage();
return 'OK'; } catch (error) { Zabbix.Log(4, '[Wechat Webhook] notification failed: ' + error); throw 'Sending failed: ' + error + '.'; }
  1. Message templates

这里可以添加三种消息通知模板

问题模板

Message type: 问题
主题:<font color="#FF0000" face="黑体">告警通知 - {TRIGGER.SEVERITY} - {EVENT.NAME}</font>
消息:
**设备名称**:{HOST.NAME}
**告警IP**:{HOST.IP}
**所属群组**:{TRIGGER.HOSTGROUP.NAME}
**告警等级**:<font color="warning">{EVENT.SEVERITY}</font>
**告警信息**:{EVENT.NAME}
**当前详情**:{ITEM.NAME}  <font color="warning">{ITEM.VALUE}</font>
**告警时间**:{EVENT.DATE} {EVENT.TIME}

恢复模板

Message type: Problem recovery
主题:<font color="#008800" face="黑体">告警恢复- {TRIGGER.STATUS} - {EVENT.NAME}</font>
消息:
**设备名称**:{HOST.NAME}
**告警IP**:{HOST.IP}
**所属群组**:{TRIGGER.HOSTGROUP.NAME}
**告警信息**:{TRIGGER.NAME}
**当前详情**:{ITEM.NAME}  <font color="info">{ITEM.VALUE}</font>
**恢复时间**:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
**持续时间**:{EVENT.AGE}

问题更新模板

Message type: Problem update
主题:告警更新 {EVENT.AGE}: {EVENT.NAME}
消息:
{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.
{EVENT.UPDATE.MESSAGE}

目前问题状态为 {EVENT.STATUS}, 持续时间: {EVENT.AGE}, 确认状态: {EVENT.ACK.STATUS}.
  1. 添加全局宏

管理 -> 一般 -> 宏

添加一个 {$EWCHAT_KEY},后面的值就填写上面企业微信群机器人的key

zabbix 添加告警触发动作

配置 -> 动作 -> Trigger actions -> 创建动作

zabbix 添加用户告报警媒介

配置 -> 用户 -> 选择用户 -> 报警媒介

测试

找一个主机,随便添加一种触发器,触发告警即可,效果如下


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 365433079@qq.com