Z投稿 | Zabbix 5.0 企业微信 WebHook 实现故障文本告警

举报
Zabbix中国 发表于 2021/02/03 22:05:57 2021/02/03
【摘要】 感谢本文作者小谈谈!Zabbix 5.0对于告警(报警媒介)进行了扩展和优化,可以直接支持 WebHook 类型的报警媒介。我们再开发企业微信机器人可以直接通过 JavaScript 语言编写脚本,因为得到了 Zabbix 的原生支持,告警脚本通用性强且更加灵活。本文将分享如何通过 Zabbix 报警媒介在企业微信发送告警信息。一、注册企业微信机器人首先需要先在自己的企业微信群里创建一个机器...

感谢本文作者小谈谈!

1.png


Zabbix 5.0对于告警(报警媒介)进行了扩展和优化,可以直接支持 WebHook 类型的报警媒介。我们再开发企业微信机器人可以直接通过 JavaScript 语言编写脚本,因为得到了 Zabbix 的原生支持,告警脚本通用性强且更加灵活。本文将分享如何通过 Zabbix 报警媒介在企业微信发送告警信息。


一、注册企业微信机器人

首先需要先在自己的企业微信群里创建一个机器人,并获取其 WebHook 地址。右击群聊天卡片,添加群机器人。

图片


为你的机器人起一个名字,点击确定,获得一个类似下图的 WebHook 地址。注意,这个 WebHook 地址非常重要,请不要泄露,否则他人可以通过这个地址给你捣乱。把这个地址复制出来,后面需要用到。

图片

二、创建告警媒介

登录 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 = {
  keynull,

  messagenull,
  msgtype"markdown",
  proxynull,

  sendMessagefunction () {
    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 即可。最后配置完成后,应该是如下图的样子。

图片


创建消息模板。Zabbix 已经预制了一些模版可以直接拿来用,也可以自定义。

图片


在模板中是支持 markdown 语法的。目前支持的 markdown 语法是如下的子集。这是由企业微信机器人开发文档定义的。

  • 标题 (支持 1 至 6 级标题,注意#与文字中间要有空格)
  • 加粗
  • 链接
  • 行内代码段(不支持跨行)
  • 引用
  • 字体颜色(有三种内置颜色)


三、测试告警媒介

编辑完成,点击“添加”,回到报警媒介类型页面。找到刚刚添加的报警媒介,在动作栏下面对应位置点击“测试”。

图片


在“Test media type”对话框中,可以直接点击“测试”,也可以自定义通知的主题和内容,如图。

图片


测试成功,在 Zabbix 端会提示“Media type test successful.”,同时在企业微信里也会收到刚刚发出来的测试消息。


图片


四、配置通知消息

到现在,就已经成功开发了一个企业微信告警机器人,现在我们要把他配置到通知消息里。首先对用户配置告警媒介。如下图,你也可以选择启动机器人的时间段,比如我要 7x24 小时盯着网络设备,这里直接 007 就好了。

图片


创建一个动作,发送消息给某些用户,并仅送到“Qiyeweixin”这个告警媒介。

图片


这样,当有设备触发器被触发产生告警时,企业微信机器人就会给你发消息了。


图片

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。