SpringCloud 在客户端和服务器之间共享范围ID
2023-12-01 15:46 更新
正常的检测模式是创建一个跨度,该跨度代表RPC的服务器端。Extractor.extract
在应用于传入的客户端请求时可能返回完整的跟踪上下文。Tracer.joinSpan
尝试使用相同的跨度ID(如果支持)或不创建子跨度来继续此跟踪。当跨度ID被共享时,报告的数据包括这样的标志。
下图显示了B3传播的示例:
┌───────────────────┐ ┌───────────────────┐ Incoming Headers │ TraceContext │ │ TraceContext │ ┌───────────────────┐(extract)│ ┌───────────────┐ │(join)│ ┌───────────────┐ │ │ X─B3-TraceId │─────────┼─┼> TraceId │ │──────┼─┼> TraceId │ │ │ │ │ │ │ │ │ │ │ │ │ X─B3-ParentSpanId │─────────┼─┼> ParentSpanId │ │──────┼─┼> ParentSpanId │ │ │ │ │ │ │ │ │ │ │ │ │ X─B3-SpanId │─────────┼─┼> SpanId │ │──────┼─┼> SpanId │ │ └───────────────────┘ │ │ │ │ │ │ │ │ │ │ │ │ │ │ Shared: true │ │ │ └───────────────┘ │ │ └───────────────┘ │ └───────────────────┘ └───────────────────┘
某些传播系统仅转发在Propagation.Factory.supportsJoin() == false
时检测到的父范围ID。在这种情况下,始终会提供一个新的跨度ID,而传入的上下文将确定父ID。
下图显示了AWS传播的示例:
┌───────────────────┐ ┌───────────────────┐ x-amzn-trace-id │ TraceContext │ │ TraceContext │ ┌───────────────────┐(extract)│ ┌───────────────┐ │(join)│ ┌───────────────┐ │ │ Root │─────────┼─┼> TraceId │ │──────┼─┼> TraceId │ │ │ │ │ │ │ │ │ │ │ │ │ Parent │─────────┼─┼> SpanId │ │──────┼─┼> ParentSpanId │ │ └───────────────────┘ │ └───────────────┘ │ │ │ │ │ └───────────────────┘ │ │ SpanId: New │ │ │ └───────────────┘ │ └───────────────────┘
注意:某些跨度报告程序不支持共享跨度ID。例如,如果设置了Tracing.Builder.spanReporter(amazonXrayOrGoogleStackdrive)
,则应通过设置Tracing.Builder.supportsJoin(false)
来禁用加入。这样做会在Tracer.joinSpan()
上强制一个新的子跨度。
以上内容是否对您有帮助:
更多建议: