分布式链路追踪是怎样实现的?traceId 和 spanId 分别是什么?
先自己想一想,再看参考要点
参考要点
- 链路追踪为每个请求分配一个 traceId,调用下游时通过 HTTP 首部传递,各个服务打印日志、上报耗时时都带上它,出错时能知道是哪一步出了错、每一步耗时多少
- W3C Trace Context 规定的 traceparent 首部四段依次是版本、traceId、调用方这次请求的 spanId 和采样标记
- 每个服务处理请求时生成自己的 spanId 并记下父 spanId,这些 span 上报到 Zipkin、SkyWalking 等系统后,按 traceId 还原出完整的调用树和每一段的耗时
- 用 traceId 在日志系统中搜索,能找到这个请求在所有服务中的日志