Установка идентификатора трассировки Span в Brave vs. Sleuth

Я ищу правильный способ установить идентификатор трассировки для Span в Brave. Pre-Brave у нас было:

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

Какой храбрый эквивалент? У меня есть следующее, но это, очевидно, неверно, так как нет возможности явно установить контекст Span.

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


person blackcompe    schedule 02.11.2018    source источник


Ответы (3)


Вы можете сделать это так 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();
}

Взгляните на весенний облачный сыщик руководство по миграции, чтобы уловить все изменения

person yevtsy    schedule 04.11.2018
comment
traceId() не сеттер. - person blackcompe; 06.11.2018
comment
Ты прав. По умолчанию корневые трассировщики генерируют 64-битные или 128-битные traceId. Тем не менее, вы можете установить traceId is via TraceContext по крайней мере для дочерних трасс, как и для вновь созданных. - person yevtsy; 14.11.2018

Сначала мы можем построить TraceContext, а затем мы можем использовать это для создания TraceContextOrSamplingFlags, которое затем можно использовать для создания Span следующим образом:

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

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

person BishalG    schedule 02.10.2020

Вы можете использовать TraceContext Builder, чтобы установить свой собственный TraceId.

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

Однако это необязательно; вы можете позволить Tracer генерировать свой собственный traceId при создании нового диапазона: -

this.tracing.tracer().nextSpan().name("application.name").start();
person Sahil    schedule 06.08.2020