Заголовки не распространяются с помощью open-telemetry и spring-cloud-sleuth

Я интегрировал сборщик открытой телеметрии с spring-cloud-sleuth и пытаюсь протестировать с его помощью распределенную трассировку. Мое основное требование: если приложение app1 получает заголовок для traceId, оно должно использовать его для регистрации и отслеживания. Если нет, он может сгенерировать свой собственный traceId

Я настроил spring.sleuth.baggage.remoteFields/correlationFields как traceId.

spring:
  application:
    name: spring-cloud-sleuth-otel-slf4j
  sleuth:
    otel:
      config:
        trace-id-ratio-based: 1.0
      exporter:
        otlp:
          endpoint: http://otel-collector:4317
    baggage:
     remoteFields: requestId,serviceName,trace_id
     correlationFields: requestId,serviceName,traceId
     tagFields: requestId,serviceName,traceId

Я вызываю API в app1 от почтальона с заголовком X-B3-TraceId. Этот заголовок используется в журналах и трассировках, создаваемых приложением app1. Теперь я вызываю API app2 из app1, используя RestTemplate. В приложении2 я вижу заголовок с именем b3 вместо X-B3-TraceId.

Однако, если я изменю имя заголовка на traceId вместо X-B3-TraceId при вызове app1 из почтальона, оно будет распространено на app2. Однако в этом случае сгенерированная app1 трассировка не использует этот заголовок traceId, а создает новый. Нужно ли мне добавлять какие-либо дополнительные настройки для распространения этих заголовков с правильными именами?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я смог заставить его работать. По умолчанию стиль распространения настроен на использование один заголовок, который необходимо изменить, чтобы использовать несколько заголовков. Это можно сделать, выполнив следующие шаги: - Используя смелый: -

@Bean
PropagationFactorySupplier myPropagationFactorySupplier() {
  return () -> B3Propagation.newFactoryBuilder().injectFormat(B3Propagation.Format.MULTI).build();
}

Без использования храбрых:-

    @Bean
    public B3Propagator b3Propagator() {
        return B3Propagator.injectingMultiHeaders();
    }

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