干货|Zabbix 配置 Webhook 告警推送至企业微信
5天认证培训,系统掌握,请联系13817720274.
背景
Zabbix如何将告警通过Webhook发送至IM?网上搜罗一番发现配置还是比较繁琐,以此为由本文将介绍如何通过自带的Webhook功能将告警信息推送至IM平台,笔者的推送思路是创建两个Webhook一个为一般告警或以下,另一个为严重和灾难级别,方便区分告警紧急程度,下面来看看如何配置吧。
版本与环境
版本:Zabbix 6.0 LTS
IM:企业微信
Webhook
什么是Webhook
以下是来自GPT对Webhook的介绍: Webhook 是一种网络编程的概念,用于在特定事件发生时,将数据或通知传送到指定的 URL。它是一种异步通信方式,可以让应用程序之间实现实时的数据交换和信息传递。 以下是 Webhook 的一些基本概念和特点:- 工作原理: Webhook 的工作原理很简单。当某个事件在源应用程序中触发时,源应用会向预先配置的目标 URL 发送 HTTP 请求。目标 URL 可以是你自己的服务器、外部服务、第三方应用程序等。- 事件触发: Webhook 通常用于捕获和响应特定事件,如用户注册、支付成功、数据更新等。当事件发生时,源应用程序会将相关数据封装为一个 HTTP 请求,并发送到目标 URL。- 实时性: Webhook 实现了实时数据传输,因为事件触发后立即发送通知。这与轮询(Polling)方式不同,后者需要定期查询源数据是否有更新。- 自定义数据: Webhook 可以在请求中传递自定义数据,这样目标应用程序可以根据数据内容做出适当的处理。- 用途广泛: Webhook 在很多场景中得到应用,包括通知、集成、自动化等。比如,你可以通过 Webhook 将表单提交的数据发送到外部数据库、实现不同应用程序之间的集成,或者实现实时通知功能。- 安全性: Webhook 通常需要进行身份验证,确保只有合法的请求可以触发。常见的方式包括使用密钥、令牌、数字签名等来验证来源。- 管理: 一些服务提供了管理界面,让用户可以配置和管理 Webhook,包括设置事件、目标 URL、请求方法等。 Webhook 的使用非常灵活,可以根据不同的应用场景进行定制。许多云服务、应用程序和开发框架都支持 Webhook 功能,使得不同系统之间的集成更加便捷。
创建Webhook
先创建一个群聊,点击菜单->添加群机器人->添加机器人。
选择新建机器人。
输入机器人名称后点击添加。
创建完成后得到一个webhook地址。
安装ZABBIX
参照此片文章
创建一般告警媒介
创建告警类型
按需填入相关信息,token获取请参照 创建Webhook 章节。
javaScript脚本内容如下,有相关注释。
var WeCom = {
message: null,
webhook_url: null,
sendMessage: function() {
// 定义消息推送格式
var params = {
msgtype: "markdown",
markdown: {
content:WeCom.message
},
// 这个参数控制是否禁用消息中的链接预览。当设置为 true 时,如果消息中包含链接,企业微信客户端将不会自动预览链接的内容,而是直接显示链接地址。
disable_web_page_preview: true,
},
data,
response,
request = new CurlHttpRequest();
request.AddHeader('Content-Type: application/json');
data = JSON.stringify(params);
// 将推送信息写入zabbix日志中用于排错,第一个参数 4 表示日志级别Information,不存储webhook链接信息,避免泄露。
Zabbix.Log(4, '[WeCom Webhook] URL: Webhookaddress');
Zabbix.Log(4, '[WeCom Webhook] params: ' + data);
// 推送告警消息
response = request.Post(WeCom.webhook_url, data);
Zabbix.Log(4, '[WeCom Webhook] HTTP code: ' + request.Status());
Zabbix.Log(4, '[WeCom Webhook] response: ' + response);
// 格式化返回的结果并做出判断,有异常则抛出异常。
try {
response = JSON.parse(response);
}
catch (error) {
response = null;
Zabbix.Log(4, '[WeCom 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);
// 判断Webhook_url参数是否定义,未定义抛出错误。
if (typeof params.Webhook_url === 'undefined') {
throw 'Incorrect value is given for parameter "Webhook_url": parameter is missing';
}
// 传参给WeCom
WeCom.webhook_url = params.Webhook_url;
WeCom.message = params.Subject + '\n' + params.Message;
// 执行消息推送函数
WeCom.sendMessage();
// 返回给zabbix,ok 在 Zabbix 动作中会被用来标识成功执行。
return 'OK';
}
// 遇到错误抛出错误信息。
catch (error) {
Zabbix.Log(4, '[WeCom Webhook] notification failed: ' + error);
throw 'Sending failed: ' + error + '.';
}
配置一般告警通知消息模板
告警通知消息格式如下图所示:
告警可用变量请参照官方文档 跳转
配置信息如下,标题为和关键信息加粗和上色(黄色)。
# <font color="warning">【ZABBIX监控告警】</font>
>通知时间:<font color="comment">{DATE}-{TIME}</font>
>告警级别:**<font color="warning">{TRIGGER.SEVERITY}</font>**
>主机名称:<font color="comment">{HOST.NAME}</font>
>主机IP:<font color="comment">{HOST.IP}</font>
>告警时间:**<font color="warning">{EVENT.DATE}-{EVENT.TIME}</font>**
>问题名称:**<font color="warning">{EVENT.NAME}</font>**
>问题详情:<font color="comment">{ITEM.NAME}:{ITEM.VALUE}</font>
>目前状态:**<font color="warning">{TRIGGER.STATUS}</font>**
>操作数据:<font color="comment">{EVENT.OPDATA}</font>
>告警持续时间:**<font color="warning">{EVENT.DURATION}</font>**
>[确认告警和查看详情,请点击链接](http://http://x.x.x.x:8080/)
企业微信webhook支持三种颜色,详情参考官方文档跳转
配置一般告警恢复消息模板
告警消息恢复通知格式如下图所示:
告警可用变量请参照官方文档 跳转
配置信息如下,标题为和关键信息加粗和上色(绿色)。
# <font color="info">【ZABBIX告警恢复】</font>
>通知时间:<font color="comment">{DATE}-{TIME}</font>
>告警级别:**<font color="info">{TRIGGER.SEVERITY}</font>**
>主机名称:<font color="comment">{HOST.NAME}</font>
>主机IP:<font color="comment">{HOST.IP}</font>
>告警时间:**<font color="warning">{EVENT.DATE}-{EVENT.TIME}</font>**
>问题名称:**<font color="info">{EVENT.NAME}</font>**
>问题详情:<font color="comment">{ITEM.NAME}:{ITEM.VALUE}</font>
>目前状态:**<font color="info">{TRIGGER.STATUS}</font>**
>操作数据:<font color="comment">{EVENT.OPDATA}</font>
>告警持续时间:**<font color="info">{EVENT.DURATION}</font>**
>[确认告警和查看详情,请点击链接](http://x.x.x.x:8080/)
点击添加,完成告警媒介添加。
验证告警媒介
如下图所示标识脚本调用正常,出现异常情况可根据日志信息针对性解决。
会收到这样一条信息。
配置一般告警动作
点击创建动作。
定义名称和点击添加条件。
选择一般严重及以下等级告警。
验证配置。
配置操作,发送到的用户组或用户至少要有设备的读取权限。
定义告警恢复操作。
核对配置后点击添加。
配置用户一般告警媒介
进入Admin用户。
配置告警级别。
核对信息,点击更新。
创建紧急告警媒介
配置紧急告警通知消息模板
将一般告警媒介克隆一份,替换Webhook的地址。
修改名称和Webhook地址。
修改告警消息模板,主题修改为ZABBIX监控紧急告警 ,问题和恢复都需要修改然后点击添加。
配置紧急告警动作
配置条件为严重及以上
设置操作为紧急告警,告警周期缩短至每60秒一次
设置恢复操作
核对后点击添加。
区分普通和紧急告警。
配置用户紧急告警媒介
核对配置后点击更新。
至此Zabbix通过Webook告警配置完成。
其它IM平台修改一下Webhook地址应该就好了。
原文链接:https://zhuanlan.zhihu.com/p/649973605
延伸阅读