批处理任务把 200 条消息攒成一批调模型,一次请求带着两百个上游来源,只透传了首个 traceparent,面板上其余一百九十九条的链路全是断的,出问题时查不到来源。

一开始怀疑是「采集端配置裁剪了 links 字段」,查了一圈,方向不对。

这类报错背后常见的原因有几处,逐个排除就行。批量请求只复制了首个上游的 trace 上下文。还有一种是span 上没有设置 link,采集端不知道还有别的来源。

少数情况下是异步子任务没有复制 contextvars,上下文丢失。

上来先确认 span 上挂了多少条链接

python dump_span.py --trace-id $TID --show-links

给批量 span 挂上全部来源链接

python batch_trace.py --links-from batch.json

然后确认 collector 没有裁剪该字段

curl -s http://localhost:13133/config | grep -i link

末了抽一条完整链路核对来源数量

python verify_trace.py --trace-id $TID --expect 200

别只看报错消失,验证要多做一步。该批次的 span 上有 200 条 link,任意一条来源都能反查到批次,链路不再断。

提醒一点。一对多的批处理场景不能只靠父子关系,link 才是表达多来源汇合的正确结构。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189