0
点赞
收藏
分享

微信扫一扫

干货|Webhook配置钉钉/飞书机器人告警


 马嘉炜 | Zabbix开源社区签约专家


  • SRE运维工程师,六年Zabbix监控系统使用经验。在Zabbix架构设计及性能优化领域有丰富的经验,擅长监控模板制作及Zabbix API的二次开发。
  • 官方使用手册《Zabbix标准模板指南》译者



简介

自 Zabbix 4.4.4 版本开始,Zabbix 的报警媒介类型加入了​​Webhook​​的支持。

Webhook 类型可用于使用自定义 JavaScript 代码进行 HTTP 调用,可以很方便的和外部系统进行集成,例如钉钉机器人、飞书机器人、企业微信等。

也可以集成第三方的系统来实现更加高级的功能,例如当主机自动注册到 Zabbix 中时,通过 Webhook 类型调用 API,将资产信息同步到 CMDB 系统,或者报警发生时,调用自动化平台的 API 来实现故障自愈的能力。



Webhook VS 自定义脚本


Webhook

自定义脚本

语言支持

JavaScript

Shell/Python/PHP/Go 等

存储位置

Zabbix 数据库

Zabbix Server 服务器

参数传递

支持

支持

HTTP 代理

支持

脚本内实现

配置复杂度

开箱即用

配置繁杂

后期维护

Web 界面修改配置

需要登录服务器修改配置



配置钉钉机器人告警



一、创建报警媒介

打开 Web 界面,并导航到管理 -> 报警媒介类型,点击右上角创建媒介类型

干货|Webhook配置钉钉/飞书机器人告警_javascript



1. 配置报警媒介类型

配置参考如下:

名称:DingTalk
类型:Webhook
参数:
|  名称  |  值   |  说明  |
| —- | —- | —- |
|  HTTPProxy   |    | Http代理地址 |
|  Message   | {ALERT.MESSAGE} |  告警消息内容  |
|  Subject   | {ALERT.SUBJECT} |  告警消息主题  |
|  To   | {ALERT.SENDTO} |  告警消息接收者  |

脚本:见下文
超时:30s

其他配置及说明参考文档:​​Webhook​​

脚本内容:

try {    // 实例化参数
var params = JSON.parse(value),
req = new HttpRequest(),
msg = {
msgtype: 'text',
text: {
content: params.Subject + '\n' + params.Message
}
},
resp; // 判断是否需要配置HTTP代理
if (params.HTTPProxy) {
req.setProxy(params.HTTPProxy);
} // 添加header头变量
req.addHeader('Content-Type: application/json'); // 发送HTTP Post请求,格式:req.post(url, data)
resp = req.post(params.To, JSON.stringify(msg)
); // 判断HTTP请求返回的状态码,非200则抛出异常
if (req.getStatus() != 200) { throw 'Response code: ' + req.getStatus();
} // 返回响应结果
resp = JSON.parse(resp); return JSON.stringify(resp);
}catch (error) { throw 'Failed with error: ' + error;
}

脚本解析:

​var params = JSON.parse(value)​​: 脚本外传入的参数存放在value变量内,数据为json格式。通过JSON.parse方法转换为JavaScript的对象。例如params.Subject对应的就是上面{ALERT.SUBJECT}的值

​req = new HttpRequest()​​: 实例化一个HTTP对象。该对象封装了 cURL 句柄,允许发送简单的 HTTP请求。错误将作为异常抛出。

注意:在Zabbix5.4之前,该对象名为CurlHttpRequest。

​msg​​: HTTP请求的数据,这里是将告警的主题和内容封装为一个钉钉机器人支持的数据格式。

​resp​​: HTTP请求响应对象。

​req.setProxy(params.HTTPProxy)​​: 设置HTTP代理。

​req.addHeader('Content-Type: application/json')​​: 添加HTTP请求的header头变量。

​resp = req.post(params.To, JSON.stringify(msg))​​: 发送HTTP Post请求。JSON.stringify方法将JavaScript的对象转换为json格式。

​req.getStatus()​​: HTTP请求的响应状态码。

其他Webhook脚本案例参考:​​Webhook 脚本范例​​JavaScript内置的对象及方法参考:​​JavaScript对象​​

配置完成后如下图所示

干货|Webhook配置钉钉/飞书机器人告警_自定义_02

干货|Webhook配置钉钉/飞书机器人告警_javascript_03



2. 配置消息模版

选择Message template标签页,并添加Message type(消息类型),消息类型、主题、消息的内容根据实际需求配置即可,也可以直接使用默认的内容。

干货|Webhook配置钉钉/飞书机器人告警_json_04

干货|Webhook配置钉钉/飞书机器人告警_自定义_05

干货|Webhook配置钉钉/飞书机器人告警_javascript_06

注意:主题和消息的内容支持macro宏变量,具体的宏变量可参考​​官方文档​​

选项页面可配置告警的并发及重试,可以根据实际情况来配置。



二、获取自定义机器人Webhook



1. 选择需要添加机器人的群聊,然后依次单击群设置 > 智能群助手。

干货|Webhook配置钉钉/飞书机器人告警_自定义_07



2. 在机器人管理页面选择自定义机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像。

干货|Webhook配置钉钉/飞书机器人告警_自定义_08



3. 完成必要的安全设置,勾选我已阅读并同意《自定义机器人服务及免责条款》,然后单击完成。

干货|Webhook配置钉钉/飞书机器人告警_json_09



4. 完成安全设置后,复制出机器人的Webhook地址,可用于向这个群发送消息,格式如下:

​​https://oapi.dingtalk.com/robot/send?access_token=XXXXXX​​



三、测试告警发送

回到报警媒介类型页面,找到刚才创建的报警媒介,并点击右侧的测试

干货|Webhook配置钉钉/飞书机器人告警_自定义_10

将刚才配置的消息模版的主题粘贴到Subject输入框中,内容粘贴到Message输入框中,并将机器人的Webhook地址粘贴到To的输入框中,点击测试

干货|Webhook配置钉钉/飞书机器人告警_自定义_11

确认钉钉群将收到告警消息

干货|Webhook配置钉钉/飞书机器人告警_自定义_12



四、配置告警



1. 创建动作

Web界面导航到配置 -> 动作 -> Trigger actions,点击右上角的创建动作

干货|Webhook配置钉钉/飞书机器人告警_json_13

配置动作的名称

干货|Webhook配置钉钉/飞书机器人告警_javascript_14

配置具体的操作细节

注意:需要配置指定的发送用户,及发送的媒介

干货|Webhook配置钉钉/飞书机器人告警_javascript_15



2. 配置告警通知Webhook

Web界面导航到管理 -> 用户,找到刚才配置的发送用户,并选择报警媒介的标签页

类型选择刚才创建的报警媒介DingTalk,并将钉钉机器人的Webhook地址填入收件人的输入框,如图所示

干货|Webhook配置钉钉/飞书机器人告警_javascript_16

注意:用户需要有具体主机的可读权限才可以收到主机的告警信息。



3. 确认能够接受告警

干货|Webhook配置钉钉/飞书机器人告警_javascript_17



配置其他Webhook类型的告警

Webhook 类型除了能够配置钉钉机器人,同样也支持飞书、企业微信等。区别仅仅是在JavaScript脚本及飞书、企业微信的Webhook地址不一样。



一、配置飞书机器人告警



1. 配置报警媒介类型

配置参考如下:

名称:Feishu
类型:Webhook
参数:
|  名称  |  值   |  说明  |
| —- | —- | —- |
|  HTTPProxy   |    | Http代理地址 |
|  Message   | {ALERT.MESSAGE} |  告警消息内容  |
|  Subject   | {ALERT.SUBJECT} |  告警消息主题  |
|  To   | {ALERT.SENDTO} |  告警消息接收者  |

脚本:见下文
超时:30s

其他配置及说明参考文档:​​Webhook​​

脚本内容:

try {    // 实例化参数
var params = JSON.parse(value),
req = new HttpRequest(),
msg = {
msg_type: 'text',
content: {
text: params.Subject + '\n' + params.Message
}
},
resp; // 判断是否需要配置HTTP代理
if (params.HTTPProxy) {
req.setProxy(params.HTTPProxy);
} // 添加header头变量
req.addHeader('Content-Type: application/json'); // 发送HTTP Post请求,格式:req.post(url, data)
resp = req.post(params.To, JSON.stringify(msg)
); // 判断HTTP请求返回的状态码,非200则抛出异常
if (req.getStatus() != 200) { throw 'Response code: ' + req.getStatus();
} // 返回响应结果
resp = JSON.parse(resp); return JSON.stringify(resp);
}catch (error) { throw 'Failed with error: ' + error;
}

细心的同学可以发现,脚本内容和钉钉机器人相比,只有msg变量的部分有些许更改。



2. 配置消息模版

选择Message template标签页,并添加Message type(消息类型),消息类型、主题、消息的内容根据实际需求配置即可,也可以直接使用默认的内容。

干货|Webhook配置钉钉/飞书机器人告警_json_04

干货|Webhook配置钉钉/飞书机器人告警_自定义_05

干货|Webhook配置钉钉/飞书机器人告警_javascript_06

注意:主题和消息的内容支持macro宏变量,具体的宏变量可参考​​官方文档​​

选项页面可配置告警的并发及重试,可以根据实际情况来配置。



二、获取自定义机器人Webhook

配置飞书机器人参考:​​自定义机器人指南​​

配置完成后获取到的Webhook地址,格式如下:

​​https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxx​​

其余测试及配置告警的方法可参考上文钉钉机器人配置部分。

注意: 发送的媒介及用户的报警媒介收件人地址需要更改。




扫一扫|加入技术交流群



微信号|17502189550

备注“使用Zabbix年限+企业+姓名”

5000+用户已加入!




干货|Webhook配置钉钉/飞书机器人告警_javascript_21





干货|Webhook配置钉钉/飞书机器人告警_自定义_22




一个人走得快,一群人走得远!




举报

相关推荐

0 条评论