You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析Zabbix JSON并发送至Rundeck?JSON解析报错求助

Zabbix触发Rundeck时JSONDecodeError问题排查与解决

核心错误原因

JSON解码失败通常是以下三种情况导致:

  • Zabbix推送的Payload本身不是合法JSON(比如缺少闭合引号、逗号错误、特殊字符未转义)
  • 脚本接收输入的方式错误(比如Shell拆分了JSON参数,导致结构破损)
  • 编码不兼容(Payload含非UTF-8字符,解析时未指定编码)

分步排查与修复

1. 先确认原始Payload的合法性

在脚本开头添加日志代码,把Zabbix传递的原始内容完整写入文件,方便排查:

import sys
# 写入原始Payload到日志
with open('/tmp/zabbix_raw_payload.log', 'w') as log_file:
    log_file.write(sys.stdin.read())

触发告警后,用python -m json.tool /tmp/zabbix_raw_payload.log命令验证JSON格式。如果命令报错,说明Zabbix的Payload模板有问题,需要调整模板修正语法错误。

2. 修正脚本的JSON解析逻辑

从标准输入读取Payload的场景

确保读取完整输入,同时添加异常捕获并记录错误详情:

import json
import sys

try:
    # 读取完整输入并去除首尾空白
    raw_payload = sys.stdin.read().strip()
    if not raw_payload:
        raise ValueError("未接收到有效Payload")
    
    # 解析JSON
    trigger_data = json.loads(raw_payload)
except json.JSONDecodeError as decode_err:
    # 记录解码错误位置和原始数据
    with open('/tmp/json_decode_error.log', 'a') as err_log:
        err_log.write(f"解码错误位置:{decode_err.pos},错误信息:{decode_err.msg}\n")
        err_log.write(f"原始Payload:{raw_payload}\n")
    sys.exit(1)
except Exception as general_err:
    with open('/tmp/script_error.log', 'a') as err_log:
        err_log.write(f"脚本异常:{str(general_err)}\n")
    sys.exit(1)

从命令行参数读取Payload的场景

Shell会拆分含空格、引号的参数,需要拼接所有参数为完整JSON字符串:

import json
import sys

try:
    # 拼接所有命令行参数为完整JSON
    raw_payload = ' '.join(sys.argv[1:]).strip()
    trigger_data = json.loads(raw_payload)
except json.JSONDecodeError as decode_err:
    with open('/tmp/json_decode_error.log', 'a') as err_log:
        err_log.write(f"解码错误:{decode_err}\n原始数据:{raw_payload}\n")
    sys.exit(1)

3. 处理编码与特殊字符问题

如果Payload包含中文或非ASCII字符,确保用UTF-8编码解析:

raw_payload = sys.stdin.read().strip().encode('utf-8').decode('utf-8')

同时检查Zabbix触发器模板,确保双引号、反斜杠等特殊字符已正确转义(比如用\"代替")。

4. Rundeck调用的额外检查

  • 脚本向Rundeck发送请求时,必须设置Content-Type: application/json请求头,否则Rundeck无法正确解析请求。
  • 确认Zabbix服务器IP已加入Rundeck的API访问白名单,且调用用户拥有重启服务的权限。

内容的提问来源于stack exchange,提问作者manthysBR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:16:20