【问题标题】:How to use TraceContext to set a traceId in Spring Sleuth and brave?Spring Sleuth 中如何使用 TraceContext 设置 traceId 和勇敢?
【发布时间】:2018-12-06 14:29:15
【问题描述】:

我需要将带有现有 ID 的 traceId(我们从主源应用程序创建了某种相关 ID)设置为勇敢的跟踪器。

我不想使用 Spring Sleuth/brave created 之一,因为我想让它在我的不同微服务中保持一致。我能够创建跟踪和跨度,并且能够将所有详细信息发送到 Zipkin。我的示例 sn-p:

import brave.Span;
import brave.Span.Kind;
import brave.Tracer;
import brave.propagation.TraceContext;  

span = this.tracer.nextSpan().name("myservice");
span.kind(Kind.SERVER);
span.tag("path", servletPath).start();

我正在使用:Spring Cloud 'Greenwich.BUILD-SNAPSHOT' 并且勇敢。整个目的是在zipkin ui中使用correlationId而不是traceId进行搜索。

【问题讨论】:

    标签: spring-cloud zipkin brave


    【解决方案1】:

    您将需要自己的PropagationFactory 实现。这是默认的:https://github.com/openzipkin/brave/blob/master/brave/src/main/java/brave/propagation/B3Propagation.java

    你可以创建一个 bean,sleuth 应该使用它而不是这个。

    更具体地说,您将需要一个带有自定义TraceContext.Extractor<C> 实现的实现。然后,这可以从您的标头中提取跟踪 ID,并添加返回适当的 TraceContext。然后它可以使用正常的标头传递它。如果您想在向下游发送时使用相同的关联标头,那么您还必须实现TraceContext.Injector<C>

    【讨论】:

    • 谢谢布赖恩。我相信这将允许添加其他标题以及实际标题。我不想添加任何新标头,而是想用我的 correlationId 值更新现有的跟踪标头。
    • 我的解决方案就是您要找的,PropagationFactory 处理传入和传出的标头,包括定义要检查的标头以及如何将它们写回
    • 大家好,这是设置字母数字值用作 TRACE ID 的值吗?是否期望仅将长值用于 TRACE ID 或任何自定义 TRACE ID 的值(如果已自定义)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 2021-05-06
    • 2022-10-23
    • 2019-12-17
    • 2022-11-11
    • 1970-01-01
    • 2021-09-26
    相关资源
    最近更新 更多