4 Webhook
概述
webhook 媒介类型可用于使用自定义 JavaScript 代码发起 HTTP 调用,从而与帮助台系统、聊天工具或即时通讯软件等外部软件进行直接集成。 您可以选择导入由 Zabbix 提供的集成,或从头开始创建自定义集成。
集成
以下集成可用,允许使用预定义的 webhook 媒介类型将 Zabbix 通知推送到:
- brevis.one
- Discord
- Event-Driven Ansible
- Express.ms messenger
- GitHub
- GLPI
- IBM Maximo Service Request
- iLert
- iTop
- Jira
- Jira Service Management
- ManageEngine ServiceDesk
- Mantis Bug Tracker
- Mattermost
- MS Teams
- MS Teams Workflows
- LINE
- Opsgenie
- OTRS CE
- Pagerduty
- Pushover
- Redmine
- Rocket.Chat
- ServiceNow
- SIGNL4
- Slack
- SolarWinds
- SysAid
- Telegram
- TOPdesk
- VictorOps
- Zammad
- Zendesk
除了此处列出的服务外,Zabbix 还可以与 Spiceworks 集成(无需 webhook)。 要将 Zabbix 通知转换为 Spiceworks 工单,请创建一个电子邮件媒介类型,并在指定 Zabbix 用户的配置文件设置中输入 Spiceworks 帮助台电子邮件地址(例如 help\@zabbix.on.spiceworks.com)。
配置
要开始使用 webhook 集成:
- 在已下载的 Zabbix 版本的
templates/media目录中找到所需的 .yaml 文件,或从 Zabbix git repository 下载该文件。 - 将该文件导入到您的 Zabbix 安装中。
webhook 将出现在媒介类型列表中。 - 根据 Readme.md 文件中的说明配置 webhook(您可以点击上方的 webhook 名称以快速访问 Readme.md)。
要从头创建自定义 webhook:
- 前往 告警 > 媒介类型。
- 点击 创建媒介类型。
媒介类型选项卡包含此媒介类型特有的各种属性:

所有必填输入字段都以红色星号标记。
以下参数是 webhook 媒介类型特有的:
| 参数 | 描述 |
|---|---|
| 参数 | 将 webhook 变量指定为属性和值对。 对于预配置的 webhook,参数列表会因服务而异。请查看 webhook 的 Readme.md 文件了解参数说明。 对于新的 webhook,默认包含若干常见变量(URL:<empty>、HTTPProxy:<empty>、To:{ALERT.SENDTO}、Subject:{ALERT.SUBJECT}、Message:{ALERT.MESSAGE}),您可以保留或删除它们。 Webhook 参数支持用户宏、问题通知中支持的所有宏,以及额外支持的 {ALERT.SENDTO}、{ALERT.SUBJECT} 和 {ALERT.MESSAGE} 宏。 如果您指定了 HTTP proxy,该字段支持与监控项配置中的 HTTP proxy 字段相同的功能。proxy 字符串可带有前缀 [scheme]://,以指定所使用的 proxy 类型(例如 https、socks4、socks5;请参见文档)。 |
| 脚本 | 在参数字段中点击或点击其旁边的铅笔图标时,会打开模态编辑器;请在其中输入 JavaScript 代码。该代码将执行 webhook 操作。 脚本是接受参数-值对的函数代码。应使用 JSON.parse() 方法将值转换为 JSON 对象,例如: var params = JSON.parse(value);。代码可以访问所有参数,可执行 HTTP GET、POST、PUT 和 DELETE 请求,并支持 CONNECT、PATCH、HEAD、OPTIONS 和 TRACE 等附加方法,同时可控制 HTTP 标头和请求体。 脚本必须包含 return 运算符,否则将无效。它可以返回 OK 状态以及可选的标签和值列表(请参见 处理标签 选项),或者返回错误字符串。 恢复事件(无论是自动生成还是手动关闭产生)由服务器创建,并包含已解决的事件标签(包括从模板、主机和触发器继承的标签)。Webhook 脚本会在告警创建后执行;因此,webhook 脚本返回的标签仅会在初始告警创建之后添加,不会出现在初始问题消息或即时恢复消息的 {EVENT.TAGS} 和 {EVENT.RECOVERY.TAGS} 宏中。注意:建议使用局部变量(例如 var local = 1)而不是全局变量(例如 global = 1),以确保每个脚本都基于自己的数据运行,并避免并发调用之间发生冲突(请参见已知问题)。另请参见:Webhook 开发指南、Webhook 脚本示例、附加 JavaScript 对象。 |
| 超时 | JavaScript 执行超时(1-60s,默认 30s)。 支持时间后缀,例如 30s、1m。 |
| 处理标签 | 勾选此复选框以将返回的 JSON 属性值作为标签处理。这些标签会添加到任何现有的问题标签中。 请注意,使用 webhook tags 时,webhook 必须返回一个至少包含空 tags 对象的 JSON 对象: var result = {tags: {}};可返回的标签示例:jira-id:prod-1234、responsible:John Smith、processed:<no value> |
| 包含事件菜单项 | 勾选此复选框,以在事件菜单中包含一个指向已创建外部工单的链接项。 对于每个已启用且勾选了此复选框的 webhook,都会包含一个菜单项。请注意,如果 菜单项名称 和 菜单项 URL 参数中包含任何 {EVENT.TAGS.<tag name>} 宏,则只有在这些宏可被解析时才会包含该菜单项(即事件已定义这些标签)。 如果勾选此项,则该 webhook 不应用于向不同用户发送通知(建议改为创建专用用户),也不应用于单个问题事件的多个告警动作中(请参见针对单个问题事件)。 |
| 菜单项名称 | 指定菜单项名称。 支持 {EVENT.TAGS.<tag name>} 宏。 仅当勾选 包含事件菜单项 时,此字段才是必填项。 |
| 菜单项 URL | 指定菜单项的底层 URL。 支持 {EVENT.TAGS.<tag name>} 宏。 仅当勾选 包含事件菜单项 时,此字段才是必填项。 |
有关如何配置默认消息和告警处理选项的详细信息,请参见通用媒介类型参数。
即使 webhook 不使用默认消息,仍必须为该 webhook 使用的操作类型定义消息模板。
测试
要测试已配置的 webhook 媒介类型:
- 在媒介类型列表中找到相应的 webhook。
- 单击列表最后一列中的 Test(将打开一个测试窗口)。
- 根据需要编辑 webhook 参数值。
将宏替换为示例值;否则宏将无法解析,测试将失败。 - 单击 Test。
在测试窗口中替换或删除值只会影响测试过程,实际的 webhook 属性值将保持不变。

要在不离开测试窗口的情况下查看媒介类型测试日志条目,请单击 Open log(将打开一个新的弹出窗口)。

如果 webhook 测试成功:
- 将显示 “Media type test successful.” 消息。
- 服务器响应将显示在灰色的 Response 字段中。
- Response 字段下方会标明响应类型(JSON 或 String)。
如果 webhook 测试失败:
- 将显示 “Media type test failed.” 消息,后跟其他失败详情。
用户介质
配置介质类型后,前往 用户 > 用户 部分,将 webhook 介质分配给现有用户,或创建一个新用户来代表该 webhook。
为现有用户设置用户介质的步骤对于所有介质类型都是通用的,详见介质类型页面。
如果 webhook 使用标签来存储工单\消息 ID,请避免将同一个 webhook 作为介质分配给不同用户,因为这样做可能会导致 webhook 错误(适用于大多数使用 包含事件菜单项 选项的 webhook)。
在这种情况下,最佳实践是创建一个专用用户来代表该 webhook:
- 配置 webhook 介质类型后,前往 用户 > 用户 部分,创建一个专用的 Zabbix 用户来代表该 webhook——例如,对于 Slack webhook,可使用用户名 Slack。
除介质外,所有设置都可以保留默认值,因为该用户不会登录 Zabbix。 - 在用户资料中,前往 介质 选项卡,并添加一个 webhook,填写所需的联系信息。
如果 webhook 不使用 发送到 字段,请输入任意受支持字符的组合,以绕过验证要求。 - 为该用户授予其需要发送告警的所有主机的至少只读权限。
配置告警动作时,在操作详情的 发送到用户 字段中添加该用户——这将告知 Zabbix 对此动作的通知使用该 webhook。
配置告警动作
动作决定了应通过 webhook 发送哪些通知。 涉及 webhook 的配置动作步骤与所有其他媒介类型相同,但以下情况除外:
- 如果 webhook 使用 webhook 标签 来存储工单\消息 ID 并处理更新\解决操作,请避免在单个问题事件中于多个告警动作中使用同一个 webhook。 如果存在 {EVENT.TAGS.<tag name>} 且该值在 webhook 中被更新,则其结果值将是未定义的。 为避免这种情况,请在 webhook 中使用新的标签名称来存储更新后的值。 这适用于 Zabbix 提供的 Jira、Jira Service Desk、Mattermost、Opsgenie、OTRS、Redmine、ServiceNow、Slack、Zammad 和 Zendesk webhook,以及大多数使用 Include event menu entry 选项的 webhook。 但请注意,单个 webhook 可以在同一动作的多个操作或升级步骤中使用,也可以在不同动作中使用,只要这些动作不会因不同的条件而被同一个问题事件触发。
- 在针对内部事件的动作中使用 webhook 时,请确保勾选 Custom message 复选框,并在动作操作配置中定义自定义消息。 否则,将不会发送通知。