先把当时的情况摆出来。给模型调用加了装饰器埋点,网关层又用中间件包了一次,同一次请求在追踪系统里出现两条根 trace,成本统计直接翻倍。
这类报错背后常见的原因有几处,逐个排除就行。装饰器与中间件都创建了根 span。也可能是没有检查上下文里是否已有父节点。
另外,异步任务各自新建一条。少数情况下是采样器把两条都当成独立根处理。
先统计同一请求的 trace 条数
python cnt_trace.py --req-id abc123
只在一层创建 span 其余挂子节点
grep -rn "start_as_current_span" app/ | wc -l
再往下加去重标记避免重复上报
python dedup_span.py --key request_id
末了重跑一次看成本统计是否回落
python cost_stat.py --window 1h
改之前先确认了最近有没有人动过配置,避免白查一遍。
恢复的判定其实很直接。同一请求只留一条根 trace,成本统计回落到实际调用量,子节点仍然完整。
容易忽略的是,埋点层级越多越容易重复,只在一层创建根 span 是简单有效的约束。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
