排查回放失败
写给 AI 代理和脚本:从一个失败的回放计划,或者从订单号这类业务编号出发,找到失败请求的差异和日志。
准备
export SP_API_URL=http://127.0.0.1:8090
export SP_TOKEN=<令牌> # 部署要求登录时才需要一条命令
sp diagnose replay <planId> --out-dir .sp-work --json它把失败用例的差异写成文件并返回汇总,文件路径在 data.artifacts 里。见 sp diagnose。
分步排查
1. 检查后端,找到应用
sp health --json
sp app list --json从 data.items[].appId 取应用 ID。
2. 找到回放计划
已经有 planId 就跳过这一步:
sp app replays <appId> --limit 5 --json3. 列出失败的用例
sp replay case list --plan <planId> --failed --jsondata.items 中的每个用例,记下 replayId、traceId、operationId 和 diffResultCode(1 表示有差异,2 表示回放失败)。要按时间查日志时,还会用到 recordTime 和 replayTime;errorMessage 说明回放失败的原因。
4. 获取差异
sp diagnose replay <planId> --out-dir .sp-work --json它为每个有差异的用例写一个 JSON 文件(只写能找到差异内容的),路径列在 data.artifacts 里,读差异文件时以这个列表为准;没有文件的用例不一定没有差异。另起一步读取这些文件,对比 baseMsg(录制时)和 testMsg(回放时)。回放失败的用例没有差异,从它的 errorMessage 和日志入手。
5. 查看这个请求的日志
用失败用例的 traceId。通过 HTTP 接口查询时,后端会自动选定时间窗:录制前后一段,这条 trace 每次回放前后各一段。
TRACE_ID=<失败用例的 traceId>
curl -s "${SP_API_URL}/api/recorder/logs?trace_id=${TRACE_ID}&replay_id=<replayId>" \
-H "Accept: application/json" -o .sp-work/logs-${TRACE_ID}.json
jq '[.rows[].source] | group_by(.) | map({source: .[0], n: length})' .sp-work/logs-${TRACE_ID}.json
jq '.warnings' .sp-work/logs-${TRACE_ID}.json
jq -r '.rows[] | select(.severity=="ERROR" or .severity=="WARN") | "\(.timestamp) \(.source) \(.body)"' .sp-work/logs-${TRACE_ID}.json | head -30带 replay_id 时,返回录制时的日志加上这一次回放的日志。不带时,后端扫描录制前后,以及这条 trace 最近 8 次回放前后的时间。先看 warnings:时间窗没能算出来或被截短时,它会说明。用 sp logs 查询时需要自己给时间窗:
sp logs --trace-id "$TRACE_ID" --since 2026-06-27T10:00:00Z --until 2026-06-27T10:05:00Z --json > .sp-work/logs.json想确认回放请求有没有真正打到你的服务,看 backend 日志里的 Replay send start / done / failed,见 回放发送日志标记。查不到日志时怎么判断,见 sp logs — 怎么看结果。
6. 可选:回放元数据
sp replay metadata <replayId> --json显示这次回放的 trace 和它对应的录制。
从业务编号开始排查
用户说「订单 ORD-1234 回放失败了」,却给不出 trace ID 时,按业务字段查出 trace。前提是已经有 提取规则 为这个字段建了索引:
sp trace find --app <appId> --attr-name orderId --attr-value ORD-1234 --json查到多条 trace 时,逐条查看,留下时间和接口都对得上的那条:
sp trace get <traceId> --json再看这条 trace 录下了什么:
sp record query --trace-id <traceId> --out-dir .sp-work --json
sp record completeness <traceId> --json接下来按这个 traceId 查看日志,或在回放计划里找它对应的回放用例。
已经有提取规则为用户的业务字段建了索引时,不要让用户去控制台找 trace ID,先用 sp trace find。
给技能用的提示词片段
排查 Softprobe 回放失败时:
1. `sp replay case list --plan <id> --failed --json`,取每个失败用例的 replayId 和 traceId
2. `sp diagnose replay <id> --out-dir .sp-work --json`,再读取 data.artifacts 里的文件;不要解析大段标准输出
3. 日志:执行 `curl "$SP_API_URL/api/recorder/logs?trace_id=<traceId>&replay_id=<replayId>"`;先看 warnings;按 source 统计行数;依次看 backend、agent、app 的 ERROR/WARN
4. 只有业务编号时,先执行 `sp trace find`