本帖最后由 hackfans 于 2026-6-17 08:50 编辑
一、背景需求
之前搭建了Zabbix系统,我们可是实时对网络设备进行监控了,但是不可能有人24小时呆在电脑前,我们还需要让设备告警和恢复的通知可以及时通知到手机,这样才能时刻掌握网络状态。
Zabbix一般可以通过E-Mail、短息和Webhook模式,进行网络告警通知。这里邮件通知不够明显,手机短息通知,一般也不好操作,最方便的方法就是可以借助企业微信的机器人功能,进行群内通知,及时掌握网络波动情况。
二、环境配置
(1)操作系统:Ubuntu26+1Panel+Mysql8+Zabbix 7.4
(2)机器人:企业微信或者钉钉,这里以企业微信为例,钉钉有时间再补进来,其实大同小异。
三、准备工作
(1)提前申请好企业微信,然后拉一个小群,之后添加一个机器人进来。
然后在群里,新增一个机器人,它这里叫 【信息推送】
机器人会生成一个唯一的Webhook地址,千万不要泄露出去,以免被恶意盗刷信息。
四、开始配置
现在我们开始着手在Zabbix里配置各种参数,以便实现推送到企业微信中。
(1)添加“媒介”:告警---->媒介---->创建媒介类型
1.1然后在对话框中,开始配置参数。
在这里系统默认会有URL和Proxy,可以删除也可以不用管,我这里为了看着简洁干净就全删除了。
这里的名称列严格区分大小写,必须严格注意。之前就被坑过。
| 名称 | 值 | | Key | {ALERT.SENDTO} | | Subject | {ALERT.SUBJECT} | | Message | {ALERT.MESSAGE} |
1.2点开脚本对话框,粘贴下面的代码。
- var Qiyeweixin = {
- key: null,
- message: null,
- msgtype: "markdown",
- proxy: null,
- sendMessage: function () {
- var params = {
- msgtype: Qiyeweixin.msgtype,
- markdown: {
- content: Qiyeweixin.message,
- },
- },
- data,
- response,
- request = new HttpRequest(),
- 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);
- Zabbix.log(4, "[Qiyeweixin Webhook] URL: " + url);
- Zabbix.log(4, "[Qiyeweixin Webhook] params: " + data);
- response = request.post(url, data); // ← Post 改为小写 post
- Zabbix.log(4, "[Qiyeweixin Webhook] HTTP code: " + request.getStatus());
复制代码 1.3继续打开【消息模板】标签,开始配置问题 (Problem) 和 恢复 (Recovery) 的模板数据。
问题模板代码如下:
- # <font color="warning">🔴告警通知</font>
复制代码- **主机**:{HOST.NAME}
- **IP**:{HOST.IP}
- **时间**:{EVENT.DATE} {EVENT.TIME}
- **等级**:{TRIGGER.SEVERITY}
- **状态**:{TRIGGER.STATUS}
- **信息**:{TRIGGER.NAME}
- **当前值**:{ITEM.NAME} = {ITEM.VALUE}
复制代码
恢复问题模板代码如下:
- # <font color="info">✅恢复通知</font>
复制代码- **主机**:{HOST.NAME}
- **IP**:{HOST.IP}
- **恢复时间**:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
- **持续时间**:{EVENT.AGE}
- **状态**:{TRIGGER.STATUS}
- **信息**:{TRIGGER.NAME}
- **当前值**:{ITEM.NAME} = {ITEM.VALUE}
复制代码 因为企业微信,支持markdown,所谓我们这里需要遵循markdown的语法,可以实现一些格式化的信息推送。
之后点击添加按钮。
(2)配置用户和告警媒介
2.1 一次点开用户 -> 用户 -> 选择你的管理员用户(如 Admin)
2.2开始给用户配置报警媒介数据
2.3创建收件人媒介
这里的收件人填写企业微信机器人申请的Webhook的Key值,如果你的链接是ttps://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=1234-5678-abcd,那么这里的发送人就填写1234-5678-abcd
然后点击添加,创建完毕。
然后点击更新按钮,才算添加完毕,不要直接关闭该窗口。
(3)配置动作
3.1下一步开始为告警通知配置触发动作,依次打开告警---->动作---->触发器动作---->创建动作 按钮
3.2开始配置动作数据
起一个好记的名字
然后在点击操作标签,进行数据配置
之后点击添加添加或更新按钮,恢复操作,按如上参数,一样配置。
之后点击添加按钮,提交刚才的操作。
五、验证过程
主要配置基本完成,下面开始进行告警测试环节。
(1)开始我们,可以关闭Zabbix监控的某台设备,或者拔掉设备的某一个网口,来进行测试
这里我们拔掉路由器下挂的一台NAS服务器,尝试一下。
马上我们可以在Zabbix的后台,收到了一条端口link down的消息
同时我们的企业微信,也收到了同样的告警群消息
(2)我们把网线接回去,一般设备会自动恢复,之后收到系统发来的告警恢复的微信通知。
PS:在学习和配置过程中,踩过的那些小坑和大坑
1、在配置Webhook参数配置过程中,取Key值的时候,K字母需要为大写,脚本中必须是 params.Key(大小写敏感)。
2、在配置脚本的时候,系统报错,提示Sending failed: ReferenceError: identifier 'CurlHttpRequest' undefined,后发现是因为网上找到的脚本适用于Zabbix 5.X的,在Zabbix 6.0以后的版本, CurlHttpRequest这个对象已被弃用并移除。通过官方文档,可以查询到,具体变化内容。
Zabbix 5.4 之前:使用 CurlHttpRequest(旧名称)
Zabbix 5.4 开始:引入 HttpRequest(新名称)
Zabbix 6.0 及以后:CurlHttpRequest 已被移除,必须使用 HttpRequest
新旧版本核心差异对照表
| 项目 | 旧版本 (Zabbix ≤5.2) | 新版本 (Zabbix ≥6.0) | | HTTP 请求对象 | new CurlHttpRequest() | new HttpRequest() | | 添加 Header | AddHeader('k: v') | addHeader('k', 'v') | | POST 请求 | Post(url, data) | post(url, data) | | GET 请求 | Get(url, data) | get(url, data) | | 获取状态码 | Status() | getStatus() | | 设置代理 | SetProxy(proxy) | setProxy(proxy) | | 日志输出 | Zabbix.Log(level, msg) | Zabbix.log(level, msg) |
|