问题说明
本文用于排查“HTTP 通知对象 / 第三方应用对接”类问题。
适用环境
- 产品:ZCF
- 版本:4.x、5.x
- 组件:Cloud
- 涉及对象:告警中心、报警器、HTTP 应用通知对象、客户侧 HTTP 接收程序
- 场景:客户通过 HTTP URL 接收 ZStack Cloud 告警并接入第三方平台。
问题现象
- 平台侧报警器触发后,HTTP 应用通知对象被调用。
- 客户侧应用可以感知到告警触发或 HTTP 请求到达。
- 客户侧应用读取到的告警内容为空,无法解析告警详情。
可能原因
- 客户侧 HTTP 应用或网关过滤了请求体。
- 客户程序只读取了 URL、Header 或状态码,未正确读取 Body。
- 客户侧应用框架对 Content-Type、请求方法或 Body 解析方式有限制。
- 平台侧通知发送失败,但客户侧将其他探测请求误认为告警请求。
排查步骤
- 确认报警器已触发,并记录报警器 uuid、通知对象 uuid、触发时间和告警内容。
- 检查管理节点日志,确认平台侧是否发送 HTTP 请求,以及发送过程是否有异常。
- 在客户侧 HTTP 接收端打印完整请求,包括 Method、Path、Header、Body 和响应码。
- 如果管理节点无发送失败记录,而客户侧能看到请求但 Body 为空,重点检查客户程序是否过滤或未读取请求体。
- 使用临时测试接收端复现,例如一个只记录原始请求的 HTTP 服务,隔离客户业务程序逻辑。
关键命令
grep -a -nE "Alarm|alarm|notification|notify|webhook|HTTP" /usr/local/zstack/apache-tomcat/logs/management-server.log*
解决方案
- 客户侧修改 HTTP 应用程序,使其保留并解析 ZStack Cloud 推送的请求体。
- 必要时调整客户侧网关、反向代理或应用框架的 Body 透传/解析规则。
- 重新触发测试告警,确认客户侧能记录完整 Body。
验证方法
- 平台侧无通知发送失败日志。
- 客户侧 HTTP 日志能看到完整请求体。
- 第三方平台能从请求体中解析告警标题、对象、级别和触发时间。
风险与回滚
- 不要只凭客户侧“收到请求”判断 ZStack Cloud 已发送完整内容。
- 客户侧程序调整可能影响既有告警接收流程,建议先用测试 URL 验证。
注意事项
- 涉及管理服务、数据库、证书、权限、审计和安全配置调整时,应先确认 HA 状态、业务窗口、回退方案和合规保留要求。
- 若需要数据库修改、底层文件处理、锁释放、服务重启、驱动/固件升级或批量资源变更,应联系 ZStack 官方技术支持确认后再执行。
