链路追踪的核心不是画出漂亮拓扑,而是让一次用户请求跨越服务、队列和异步任务后仍可关联。
先统一上下文传播
所有入口和客户端采用 W3C Trace Context。消息队列需要在消息属性中传播 trace 信息,并避免消费者错误复用上一个上下文。
设计属性边界
Span 属性保留服务名、路由模板、状态码、依赖和稳定业务维度。请求体、用户隐私和无界 ID 不应直接写入可检索属性。
组合采样策略
头部采样成本低,但可能漏掉罕见错误;尾部采样可以保留错误和慢请求,但 Collector 需要缓存完整 trace。常见方案是低比例基础采样,加错误、慢请求和特定租户保留规则。
processors:
tail_sampling:
decision_wait: 10s
policies:
- name: errors
type: status_code
status_code: {status_codes: [ERROR]}
验证闭环
从告警跳转到 trace,再从 trace 跳到对应日志和指标。若值班人员仍需手工复制 ID,说明上下文集成没有完成。