ZABBIX 对接飞书实现机器人报警通知

ZABBIX 对接飞书实现机器人报警通知

发表于 2023/12/04 更新于 2023/12/04 891 字 4 分钟
AI 摘要 由 AI 自动生成

|

今年年中,我开始把我自用的一个企业从企业微信迁移到飞书,历时两个半月,终于彻底迁移过来了,老企业微信也就注销掉了。ZABBIX 对接飞书也是迁移的最后一步。

其实关于 ZABBIX 对接国内各种企业 IM 已经是老生常谈的问题了。不过我在对接之前还是习惯性的搜了一下,发现使用 ZABBIX Javascript Runtime 实现的少之又少,所以我还是打算记录一下。

效果放前面

你可以通过飞书的群机器人,接收 ZABBIX 的告警信息,例如下面的是故障消息: 20231203163916 下面这个是故障恢复消息: 20231203163943

实现思路

使用 ZABBIX 6 以上版本提供的 Javascript Runtime,免去了在 ZABBIX 服务器底层放 Python 脚本的步骤,后续维护报警媒介,都可以通过 ZABBIX WEB 来实现。

扩展阅读:其它 Javascript 对象

技术实现

创建飞书机器人

我们需要先在飞书群里创建一个机器人。获取它的 Webhook 地址。创建飞书群机器人,请参考飞书帮助中心 - 如何在群组中使用机器人?,请按照文档操作,创建一个“自定义机器人”。

20231203175815

安全配置,按需启用就好了,或者干脆不启用。其中上图框选的部分,就是后文需要用到的 BOTKEY。

创建飞书消息卡片模板

创建一个飞书消息卡片模板,消息卡片模板可以很方便的帮助我们调整推送消息的样式,且消息卡片模板可以导出导入,方便复用。下面我提供了两个告警和告警恢复的消息卡片模板。

以下内容托管在 GitHub,如果看不到,请确认您是否有访问权限。

你可以直接下载另存为 json 文件,登录 飞书开放平台 - 消息卡片搭建工具,选择导入卡片,导入刚才下载的卡片配置文件。

20231203181845

导入之后,你可以对卡片结构或者内容进行微调,调整完毕后,点击“保存并发布”即可。

20231203182527

这个卡片 ID 很重要,记得存一下,一会要用的。

创建一个飞书告警媒介

在 ZABBIX 中创建一个新的报警媒介,类型选择 Webhook,参数有三个,参考下表。

Botkey:    飞书Webhook地址后面那段
HTTPProxy: 是否需要代理,如果需要代理,就加代理就好了
Message:   {ALERT.MESSAGE}

20231203192512

脚本从下面这个 Gist 中获取。以下内容托管在 GitHub,如果看不到,请确认您是否有访问权限。

配置消息模板,下面这个是告警模板,你需要替换【】中的内容,替换后,不需要加【】。

{
  "msg_type": "interactive",
  "card": {
    "type": "template",
    "data": {
      "template_id": "【消息卡片模板 ID】",
      "template_variable": {
        "event_name": "{EVENT.NAME}",
        "event_id": "{EVENT.ID}",
        "event_date": "{EVENT.DATE}",
        "event_time": "{EVENT.TIME}",
        "host_name": "{HOST.NAME}",
        "event_severity": "{TRIGGER.SEVERITY}",
        "message_url": "【这里替换成跳转到监控平台的 URL】",
        "trigger_name": "{TRIGGER.NAME}",
        "problem_item_name": "{ITEM.NAME}",
        "problem_item_value": "{ITEM.VALUE}",
        "host_ip": "{HOST.IP}",
        "from": "【消息来源,可做为安全校验字段使用】"
      }
    }
  }
}

这个是告警恢复模板。

{
  "msg_type": "interactive",
  "card": {
    "type": "template",
    "data": {
      "template_id": "【消息卡片模板 ID】",
      "template_variable": {
        "event_name": "{EVENT.NAME}",
        "event_id": "{EVENT.ID}",
        "event_date": "{EVENT.DATE}",
        "event_time": "{EVENT.TIME}",
        "host_name": "{HOST.NAME}",
        "event_severity": "{TRIGGER.SEVERITY}",
        "message_url": "【这里替换成跳转到监控平台的 URL】",
        "trigger_name": "{TRIGGER.NAME}",
        "problem_item_name": "{ITEM.NAME}",
        "problem_item_value": "{ITEM.VALUE}",
        "host_ip": "{HOST.IP}",
        "from": "【消息来源,可做为安全校验字段使用】",
        "event_duration": "{EVENT.DURATION}"
      }
    }
  }
}

添加完是这个样子的。保存即可。

20231203192527

用户关联报警媒介

对用户关联一下刚才创建的报警媒介。

20231203193400

结语

好了,现在就可以愉快的接收 ZABBIX 飞书告警了。

作者: 小谈谈
声明: 本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。