如何实现Zabbix与Webhook集成以接收Openshift(OCP)告警信息?
OCP Webhook 推送告警到 Zabbix 实现方案
完全可以实现,目前有两种成熟的落地方案,可根据你的Zabbix版本和自定义需求选择:
方案1:使用Zabbix原生Webhook功能(推荐,无额外依赖)
适用于Zabbix 5.0及以上版本、告警格式定制需求简单的场景
- 配置Zabbix侧Webhook介质
- 进入Zabbix管理界面,依次打开管理→介质类型→创建介质类型,类型选择
Webhook - 在脚本编辑区域编写解析逻辑,将OCP Webhook payload的
labels、annotations等字段映射到Zabbix要求的主机、告警名、级别、详情等标准字段,保存后即可得到Zabbix的Webhook接收地址
- 进入Zabbix管理界面,依次打开管理→介质类型→创建介质类型,类型选择
- 配置OCP侧Alertmanager
- 编辑Alertmanager配置文件,添加Zabbix Webhook接收器,示例配置如下:
receivers: - name: zabbix-receiver webhook_configs: - url: "替换为你的Zabbix Webhook地址" send_resolved: true
- 配置告警路由,将需要同步到Zabbix的告警规则指向上述
zabbix-receiver,重载Alertmanager配置即可生效 - 功能验证:手动触发OCP测试告警,确认Zabbix侧可正常生成告警事件,告警恢复时状态可同步更新
方案2:自定义转发服务(适配复杂场景)
适用于Zabbix版本低于5.0、需要对告警做二次过滤、补充元数据等定制化需求的场景
- 开发轻量转发服务,可使用Python/Go等语言快速实现,核心逻辑如下:
- 暴露HTTP接口接收OCP Alertmanager发送的Webhook告警
- 解析告警payload,按照业务需求做字段加工、过滤逻辑
- 调用
zabbix_sender工具或者Zabbix API,将加工后的告警数据推送到Zabbix server
以下是Python实现的核心代码示例:
from flask import Flask, request import subprocess app = Flask(__name__) ZABBIX_SERVER_ADDR = "你的Zabbix Server地址" @app.route("/ocp-alert", methods=["POST"]) def receive_ocp_alert(): alerts = request.json.get("alerts", []) for alert in alerts: host = alert["labels"].get("namespace", "ocp-default-cluster") item_key = f'ocp.alert[{alert["labels"]["alertname"]}]' value = f"级别:{alert['labels']['severity']} 资源:{alert['labels'].get('pod','集群')} 详情:{alert['annotations']['description']}" # 调用zabbix_sender推送告警 subprocess.run([ "zabbix_sender", "-z", ZABBIX_SERVER_ADDR, "-s", host, "-k", item_key, "-o", value ], check=False) return {"code": 0, "msg": "success"} if __name__ == "__main__": app.run(host="0.0.0.0", port=8000)
- 部署转发服务到OCP集群内或与Zabbix网络打通的服务器上,配置健康检查保障可用性
- OCP侧将Alertmanager的Webhook地址配置为转发服务的访问地址,Zabbix侧提前创建对应监控项和触发器即可
注意事项
- 网络连通性:需确保OCP Alertmanager可访问Zabbix Webhook地址或自定义转发服务地址,使用
zabbix_sender时需保证转发服务可访问Zabbix Server的10051端口 - 状态同步:必须开启
send_resolved配置,保证告警恢复信号可以同步到Zabbix,避免出现告警不自动关闭的问题 - 安全配置:建议在Webhook地址中添加鉴权token参数,避免未授权请求发送伪造告警
内容的提问来源于stack exchange,提问作者ryarali
相关产品推荐
相关产品推荐

