Zabbix + pushplus:基础设施告警推到微信
效果:触发器报警或恢复时,Zabbix 媒体类型用 Webhook 脚本 POST JSON,标题和正文来自
{ALERT.SUBJECT}、{ALERT.MESSAGE}。
前置条件
- 一个 pushplus token(官网扫码获取)
- Zabbix 5.0+(Webhook 媒体类型),有管理媒体类型和动作的权限
配置步骤
- Alerts → Media types → Create media type(旧版在 Administration),Type 选 Webhook。
- Parameters 增加(名称需和脚本里一致):
| 参数 | 值 |
|---|---|
| token | 你的 token(或 {ALERT.SENDTO},让每个用户在 Media 里填自己的 token) |
| alert_subject | {ALERT.SUBJECT} |
| alert_message | {ALERT.MESSAGE} |
- Script:
var params = JSON.parse(value);
var req = new HttpRequest();
req.addHeader('Content-Type: application/json');
var payload = JSON.stringify({
token: params.token,
title: params.alert_subject,
content: params.alert_message,
template: 'txt'
});
var resp = req.post('https://www.pushplus.plus/send', payload);
var data = JSON.parse(resp);
if (data.code !== 200) {
throw 'pushplus error: ' + resp;
}
return resp;
- 在用户 Media 里启用该类型。若 token 用
{ALERT.SENDTO},Send to 填 token。 - Actions → Trigger actions 的 Operation 选「Send message」,媒体类型选刚建的 Webhook。Message 模板里保证
{ALERT.MESSAGE}对应内容非空。 - 在媒体类型页点 Test,或手动触发一个测试告警。
不要把 Zabbix 的 Webhook 配成只填一个 URL、把整段 Event JSON POST 过去:那不会自动变成 content。必须由脚本组装字段。
验证
curl -X POST "https://www.pushplus.plus/send" \
-H "Content-Type: application/json" \
-d '{"token":"你的token","title":"Zabbix 配置测试","content":"token 可用","template":"markdown"}'
返回 JSON 的 code 为 200 后,再在媒体类型里 Test。Zabbix 服务器必须能访问 www.pushplus.plus。
常见问题
Test 失败? 看脚本抛出的 pushplus error 原文;content 为空、token 错、额度用完都会导致非 200。见 收不到消息。
告警有了、恢复没有? 在 Action 的 Recovery operations 里同样 Send message。
老版本没有 Webhook? 用 AlertScripts 目录里的 shell,内容与 Transmission 的 curl 相同,把 $1 $2 换成主题和正文。