Как использовать TraceContext, чтобы установить traceId в Spring Sleuth and Brave?
Мне нужно установить traceId с существующим Id (мы создали какой-то корреляционный идентификатор из основного приложения-источника) в Brave Tracer.
Я не хочу использовать созданный Spring Sleuth / Brave, так как хочу, чтобы он был единообразным во всех моих микро-сервисах. Я умею создавать следы и пролет и могу отправлять все детали в Zipkin. Мой образец фрагмента:
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' и смелый. Вся цель состоит в том, чтобы искать с использованием correlationId, а не traceId в пользовательском интерфейсе zipkin.
1 ответ
Вам понадобится свой собственный PropagationFactory
реализация. Вот вариант по умолчанию: https://github.com/openzipkin/brave/blob/master/brave/src/main/java/brave/propagation/B3Propagation.java
Вы можете создать боб, и сыщик должен использовать это вместо этого.
Точнее, вам понадобится реализация с пользовательским TraceContext.Extractor<C>
реализация. Затем можно извлечь идентификатор трассировки из заголовка и добавить возвращаемое значение TraceContext
, Затем он может передать его, используя обычные заголовки. Если вы хотите использовать тот же заголовок корреляции при отправке в нисходящем направлении, вам также придется реализовать TraceContext.Injector<C>
,