在Brave vs. Sleuth中设置跨度的跟踪ID

时间:2018-11-02 16:04:45

标签: spring-cloud spring-cloud-sleuth brave

我正在寻找为Brave中的Span设置跟踪ID的正确方法。勇敢之前,我们有:

Span span = Span.builder().traceId(someLong).build();

什么是勇敢的对等物?我有以下内容,但这显然是不正确的,因为无法明确设置Span的上下文。

Span span = tracer.nextSpan().start();
span.context().toBuilder().traceId(someLong).build();

3 个答案:

答案 0 :(得分:1)

您可以像这样brave.Span span = tracer.nextSpan().name("name").traceId(someLong).start();

或更高级

brave.Span span = tracer.nextSpan().name("name").traceId(someLong);
try (SpanInScope ws = tracer.withSpanInScope(span.start())) {
  // do sth
} finally {
  span.finish();
}

看看spring cloud sleuth migration guide来捕获所有更改

答案 1 :(得分:0)

您可以使用TraceContext Builder来设置自己的TraceId。

    TraceContext traceContext = TraceContext.newBuilder().traceId(traceId).build();
    Span span =
            this.tracing.tracer()
                    .toSpan(traceContext)
                    .name("application.name"))
                    .start();

这是可选的;您可以在创建新的Span时让Tracer生成自己的traceId:-

this.tracing.tracer().nextSpan().name("application.name").start();

答案 2 :(得分:0)

我们可以先建立TraceContext,然后再使用它来创建TraceContextOrSamplingFlags,然后再用它来创建Span,如下所示:

TraceContext traceContext = TraceContext.newBuilder()
                            .traceId(someTraceId)
                            .spanId(someSpanId)
                            .build();

Span span = tracer.nextSpan(TraceContextOrSamplingFlags.create(traceContext))
                            .name(someName).start();