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