Установка идентификатора трассы Спана в "Храбрый против Слюта"

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

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

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

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

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();
}

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

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

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

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

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

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

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

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

Другие вопросы по тегам