我一直在阅读W3C Trace Context规范,但我无法通过仅查看请求中的标头来弄清楚如何获得跨度之间的子关系。
假设我正确理解了处理模型,第一个服务会生成traceparent
,而后续服务会替换下游请求中parentId
的。traceparent
所以服务 A 生成 atraceparent
并向服务 B 发送请求:
host: service-b
traceparent: 00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01
服务 B 接收请求并每次更改服务 C 和服务 D 时向服务 C 和服务 D 执行两个下游请求parentId
:
host: service-c
traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
host: service-d
traceparent: 00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-01
最后traceparent
,我的请求中有 3 个
00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01
00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-01
很容易看出它们都属于 trace 0af7651916cd43dd8448eb211c80319c
,但是如何弄清楚它们之间的父子关系呢?
我最初的想法是这是使用 完成tracestate
的,但规范指出:
tracestate 使用由一组名称/值对表示的特定于供应商的数据扩展了 traceparent。在 tracestate 中存储信息是可选的。