Skip to content

排障

每个 /v1/* 响应带 X-Request-Id 头(错误体另带 debug_ref),值即本次请求的调试记录名——它是一切排查的入口。

定位首个失败点

开启请求日志(debug.enabled)后,每个请求在 devin-2api.db 留一条记录。两步快查:

  1. GET /admin/logs?q=<request-id>logs 行:状态、error_stage(哪一层败的)、error_message
  2. GET /admin/debug-logs/{id}/file/error.json → 管线内首个失败点({id} 是 logs 行的 id 列)。

状态目录的 logs/stderr.log 每请求一行摘要。完整的「症状 → 层 → 处置」手册在仓库 docs/upstream-debug-playbook.md

常见症状

症状大概率原因处置
401令牌仓无匹配行,或上游拒了账号凭据/web/tokens.html 建令牌;查 /web/accounts.html 的 lane 状态——unauthenticated 时 lane 会重解析凭据并重试一次
unavailable账号池为空/web/accounts.html 加号,或 devin.accounts + 配置 reload
429 + Retry-After本地速率闸门快败,或上游在限流error_stage 区分两者:rate_gate = 本地闩(按响应头说的时刻重试),devin_connect = 上游拒绝
SSE 在 ~300s 附近停滞客户端自己的总超时,不是代理的断开的流在服务端继续跑;语义相同的重试从完成缓存续接
prompt-too-long客户端声明的上下文窗口高过真实值 262000窗口按 262000 声明、auto-compact 阈值压在它之下——见各客户端页
permission_denied上游内容策略拦了客户端指纹或提示词本身sanitizer 已覆盖 Claude Code 指纹;其它内容可能自己触线——看 error.json 里的上游原话
previous_response_id 被拒HTTP 下代理无状态每请求带全量对话,或改用按连接维持会话的 WebSocket 传输
connect 成功但零字节127.0.0.1 被 IDE 的 IPv4 端口转发 shadow服务绑 * 时客户端指 http://[::1]:<port>
/admin/update501实例非托管自更新只对一键脚本 / 部署脚本装的服务有效;其它形态按安装路线重跑

还没解决

  • GET /admin/runtime-metrics 看实时闸门状态、逐 lane 健康与进程指标。
  • /admin/debug-logs/{id} 暴露全阶段记录(01-http-request06-http-response)——从客户端字节到上游 wire 的完整管线。
  • GitHub 开 issue,附上 X-Request-Iderror.json 内容(payload 未脱敏——分享前先读 meta.json 确认)。

基于 MIT 协议发布。