
q792602257andClaude Opus 5
8381896eeb
feat(observability): 失败响应与网关信封进链路,手工埋点尊重 suppressed
失败此前在 trace 里近乎不可见:异常处理器把异常吃掉换成信封响应,自动
instrumentation 只看到一个 HTTP 状态码,而 AppError 默认 400、信封里
success=false,跟正常返回分不出来。
- api.py:四个异常处理器(对外失败的唯一出口)各记一次 span;兜底处理器额外
record_error——对外只回一句无信息量的错误文案,异常类型与栈只在本地日志里
- telemetry.py:新增 record_envelope / record_parse_failure /
span_unless_suppressed;record_error 补 error.message / retryable /
status_code;snapshot 支持 extra 带上「这份 HTML 是哪来的」
- worker/client.py:_request 自建 span,活到解信封之后。httpx 那个 CLIENT span
在 request() 返回时就结束,此时信封还没解——success=false code=6002(租约
无效)在它看来是完成的 200 请求
- span_unless_suppressed:suppress_instrumentation 只被 instrumentation 库尊重,
手工 span 不看它,lease 空转长轮询会从这个口子把孤立 trace 放回来
- 两个 scraping client 的解析失败分支收拢到 record_parse_failure;shop_items
显式标 stage=delegate 且不落快照(它自己不抓页面,按 html 推断只会得出
「fetch 失败」的错误结论)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-28 16:07:00 +08:00
..
2026-07-27 15:05:01 +08:00
2026-07-27 10:34:53 +08:00
2026-07-27 15:05:01 +08:00
2026-07-27 16:25:20 +08:00
2026-08-14 14:05:47 +08:00
2026-08-16 23:35:51 +08:00
2026-08-17 01:05:37 +08:00
2026-07-27 16:25:20 +08:00
2026-08-16 23:35:51 +08:00
2026-08-16 23:35:51 +08:00
2026-08-16 23:35:51 +08:00
2026-08-16 23:35:51 +08:00
2026-07-27 15:05:01 +08:00
2026-08-14 14:27:38 +08:00
2026-07-27 15:05:01 +08:00
2026-08-14 16:08:39 +08:00
2026-08-16 22:46:01 +08:00
2026-07-27 15:05:01 +08:00
2026-07-27 15:05:01 +08:00
2026-07-27 15:05:01 +08:00
2026-07-27 15:05:01 +08:00
2026-08-20 16:01:47 +08:00
2026-08-28 14:56:49 +08:00
2026-07-27 15:05:01 +08:00
2026-08-28 16:07:00 +08:00
2026-08-20 16:51:24 +08:00
2026-08-13 23:58:54 +08:00
2026-07-27 16:25:20 +08:00
2026-08-28 14:56:49 +08:00