Skip to Content
故障排查

故障排查(Troubleshooting)

上报失败、数据看不到、自托管实例异常——按本页「症状 → 原因 → 解决」自助定位。 平台级值班/SRE 排障见内部 on-call runbook ,本页面向 SDK 接入开发者 + 自托管运维

先跑这一步:自托管实例用 argus-doctor 一键巡检;SDK 接入先核对下方「快速自查清单」。

快速自查清单

上报失败时,按顺序排查:

时钟

服务端要求上报请求的时间戳在 ±5 分钟(300 秒)窗口内。客户端/SDK 运行环境时钟漂移超过 5 分钟会被拒(invalid_timestamp)。用 NTP 同步系统时钟。

DSN

从 Console 项目设置复制完整 DSN,核对格式 argus://PUBLIC_KEY:SECRET_KEY@HOST/PROJECT_ID。确认 SECRET_KEY 未被改动,且从不出现在浏览器/客户端可见处(见 DSN & HMAC)。

网络可达

确认上报端点可达(Cloud 见 Console;本地默认 localhost:4318)。自托管确认 ingestion 服务在跑:docker ps | grep ingestionkubectl get pod -l app=ingestion

自托管巡检

argus-doctor # 人类可读巡检 argus-doctor --json # 供脚本消费

SDK 上报错误码速查

ingestion 鉴权失败时返回结构化错误码。对照排查:

HTTP错误码原因解决
400missing_header:X-Argus-DSN / missing_header:X-Argus-Timestamp缺必需请求头(SDK 初始化异常或版本过旧)升级 SDK;确认 DSN 字符串完整
401invalid_dsnX-Argus-DSN 的 public key 与项目 DSN 不匹配从 Console 重新复制 DSN,核对 public key
401invalid_timestamp时间戳格式错,或超 ±5 分钟窗口(时钟漂移最常见)NTP 同步时钟;确认 X-Argus-Timestampepoch 秒(不是毫秒)
401invalid_signatureHMAC-SHA256 签名校验失败(secret key 错或请求被改)核对 secret key;勿在传输中改动 body
403origin_not_allowedWeb SDK 域名白名单拒绝(即使 secret 泄露,未授权域名也无法伪造上报)在 Console 项目 Key 配置把该域名加入白名单;本地测试加 localhost
413payload_too_large单次 batch 超过 16 MiB 上限(防内存炸弹)减小单次事件数 / 缩短 flush 间隔(SDK 会自动拆包重试)
429quota_exceeded(带 Retry-After当月事件配额用尽见下方配额超限

最常见的坑X-Argus-Timestamp 用了毫秒而非,或客户端时钟漂移 > 5 分钟 → 一律 invalid_timestamp。先查时钟。

配额超限 (429)

返回 429 quota_exceeded + Retry-After: <秒> 头表示当月事件配额用尽:

  • 查用量:Console Dashboard → 当月 Usage(log / crash / apm / track / feedback / trace 全部计入)。
  • 升级套餐:Pro / Team / Business 各有更高额度。
  • 降用量:SDK 端降低采样率(详见各端 SDK 自保护配置)。
  • 等重置:Free 档月底自动重置;Retry-After 指示下次可重试的秒数。

上报返回 200 但 Console 看不到数据

事件从 SDK 到可见要走 SDK → ingestion → ClickHouse → Console 四段,逐段排查:

环节检查常见断点
① SDK → ingestion上报 HTTP 状态、请求头、签名401/403/413(见上)、429 配额(被静默丢弃前会返错误码,留意 SDK 内部日志)
② ingestion服务可用 + 能写 ClickHouse自托管:argus-doctor 看 ingestion /readyz、ClickHouse 是否可达/磁盘满
③ ClickHouse事件是否落库自托管可直查:SELECT count() FROM events_log WHERE project_id='你的项目'
④ Console 查询过滤条件project_id 不匹配(DSN 末尾与 Console 项目不一致)、查询时间范围设错、按 user_id 过滤但事件未携带该字段、channel 拼写错被跳过

最常见的「看不到」其实是 ④ 的过滤陷阱:上报用的 project_id 与你在 Console 看的项目不是同一个,或查询时间窗口没覆盖事件时间。

自托管部署故障

argus-doctor 输出解读

argus-doctor 巡检各微服务 /readyz + 基础设施(PostgreSQL / ClickHouse / Redis / MinIO)+ EE License + TLS 证书有效期,输出 [OK]/[WARN]/[FAIL] + 修复建议,退出码 0 健康 / 1 有致命问题。

检查项FAIL 常因修复
微服务 /readyz依赖(PG/CH/Redis)不可达看该服务日志;确认依赖容器启动
PostgreSQL容器未起 / 密码错 / 网络查 PG 日志;核对连接串
ClickHouse容器未起 / 磁盘满df -h;清理过期数据(TTL)或扩容磁盘
Redis / MinIO容器未起redis-cli ping / 查 MinIO 健康端点
License (EE)过期 / 无效 / 时钟漂移同步时钟;更新 License 文件
TLS 证书将过期(不足 7 天)/已过期续期/轮换证书后重载网关
备份新鲜度cron 未执行 / 目标不可达查 cron 与备份脚本日志(见 infra/deploy/README.md

聚合健康端点

监控系统可轮询 api-gateway 的聚合健康端点(汇总各服务 + 基础设施),非健康返回 503,适合做容器编排 liveness probe。详见自托管文档 

FAQ

Q:时间戳为什么要用秒不是毫秒? X-Argus-Timestamp 是 epoch ,服务端按 ±5 分钟窗口校验防重放。用毫秒会被判超窗口 → invalid_timestamp

Q:secret key 能放前端吗? 不能。端 SDK 的 secret 用于 HMAC 签名,必须只存在受控环境;Web 场景额外用域名白名单兜底(即使 secret 泄露,未授权域名也无法伪造上报)。

Q:怎么降低事件用量? SDK 端调采样率 + 合理设置 flush 批量;崩溃等关键诊断事件优先级最高。

Q:离线/air-gapped 怎么部署?自托管文档 的离线安装与 License 离线激活。


仍未解决?带上错误码 + argus-doctor --json 输出 + 复现步骤联系技术支持。