能否通过Zabbix API在系统中创建第三方应用触发的告警?
Zabbix通过API反向创建告警实现方案
完全可以实现。Zabbix没有提供直接"插入告警"的独立接口,但可以通过两种官方原生支持的路径,实现Slack等第三方平台反向在Zabbix侧生成标准告警,不需要修改源码或者操作底层数据库。
方案1:上报监控数据触发原生告警(生产环境推荐)
Zabbix的告警本质是监控项采集值命中触发器阈值后生成的问题事件,不需要强行构造告警数据,只要让第三方系统把需要触发告警的信息上报给Zabbix,配合提前配置好的触发器就能自动生成符合Zabbix全链路逻辑的告警,后续的告警收敛、通知、自愈、统计逻辑都能正常复用。
操作步骤:
- 提前在Zabbix中创建独立的第三方告警主机组,比如命名为
External_Alert_Sources,按告警来源(Slack、内部工单系统等)创建对应主机 - 在对应主机上创建**Zabbix trapper(采集器)**类型的监控项,自定义键值比如
external.alert.input,数据类型选文本,开启允许批量上报选项 - 给该监控项配置触发器,可按需求设置触发规则:比如接收到非空上报内容时触发,匹配上报内容中的
P0/P1/P2关键词映射对应告警级别,同时配置恢复规则,比如接收到resolved关键词时自动关闭告警 - 第三方侧(比如Slack的快捷指令、工作流机器人)调用Zabbix
item.pushAPI或者zabbix_sender命令,把告警内容、级别、上报人信息推送到对应监控项,触发器命中规则后就会自动生成标准Zabbix告警。
调用示例:
curl -X POST http://<你的Zabbix服务地址>/api_jsonrpc.php \ -H "Content-Type: application/json-rpc" \ -d '{ "jsonrpc": "2.0", "method": "item.push", "params": { "host": "Slack_Bot", "key": "external.alert.input", "value": "P1 支付网关回调超时 上报人:值班运维 来源:Slack生产告警群" }, "auth": "<你的Zabbix API Token>", "id": 1 }'
方案2:直接创建手动事件(适合临时告警场景)
Zabbix 5.0及以上版本提供event.create接口,可以直接生成手动类型的问题事件,生成的告警会和原生触发的告警一样展示在问题列表、监控仪表盘,也能正常触发配置的通知动作。
注意事项:
- 这类手动创建的事件不会自动恢复,需要后续调用
event.acknowledge接口传入关闭动作参数,才能标记告警为已解决状态 - 调用时必须填告警名称、告警级别、关联主机ID等必填参数,支持自定义标签标记告警来源
调用示例:
curl -X POST http://<你的Zabbix服务地址>/api_jsonrpc.php \ -H "Content-Type: application/json-rpc" \ -d '{ "jsonrpc": "2.0", "method": "event.create", "params": { "name": "Slack上报:测试环境Redis连接数超限", "severity": 3, "hosts": [{"hostid": "10102"}], "tags": [{"tag": "alert_source", "value": "Slack"}] }, "auth": "<你的Zabbix API Token>", "id": 2 }'
注意:绝对不要直接操作Zabbix后端数据库插入告警记录,这种方式绕过了Zabbix的事件状态机逻辑,会导致告警状态异常、关联通知不触发、版本升级后数据不兼容等问题。
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

