如何不使用Zabbix Sender向Zabbix Trapper Item发送JSON负载?
Zabbix Trapper 请求头与Payload整合方案
Zabbix Trapper使用自定义私有协议,完整请求由固定二进制请求头和序列化后的JSON Payload直接拼接组成,不需要将请求头字段嵌套到JSON结构中。
具体拼接规则
- 固定请求头共13字节,结构如下:
- 前4字节为固定魔数:
ZBXD - 第5字节为协议版本号,固定填
0x01即可 - 第6-13字节为小端序存储的8字节无符号整数,值为后续JSON Payload的字节长度
- 前4字节为固定魔数:
- JSON Payload直接按照trapper请求格式编写即可,示例参考:
{ "request": "sender data", "data": [ { "host": "Zabbix中预先配置的Azure监控主机名称", "key": "你创建的Trapper监控项键值", "value": "Azure Alerts推送的Activity Logs内容,可直接序列化后传入" } ] }
Azure Alerts适配方案
因为Azure Alerts默认Webhook只能发送标准HTTP请求,无法自定义二进制协议头,你可以在中间加一层轻量协议转换服务,完全不需要调用Azure API拉取数据,不会触发限流:
- 转换服务仅需实现逻辑:接收Azure Alerts的HTTP POST请求,提取请求体中的日志内容,按照上述规则拼接成Zabbix Trapper可识别的请求,转发到Zabbix Server的10051端口即可
- 转换服务可直接用Azure Function等无服务函数实现,资源消耗极低,无需额外运维成本
注意:不要将请求头的参数写入JSON Payload内部,Zabbix服务端无法识别这种格式,必须严格按照二进制头+JSON的顺序拼接。
内容的提问来源于stack exchange,提问作者aydeisen
相关产品推荐
相关产品推荐

