Проблема Spring boot 3 с трассировкой микрометров с обработкой заголовка Traceparent
У меня есть код ниже, который обрабатывает запросы от других приложений, которые передают traceId через заголовок. Я ожидаю, что родительский traceId будет гидратирован из запроса, и на панели инструментов zipkin я должен увидеть связь между этим приложением и другими приложениями. Раньше работал сspring-cloud-sleuth-zipkin
. Теперь я перешел на весеннюю загрузку 3, и пакет изменился наmicrometer-tracing-bridge-otel
(См. pom.xml). Теперь он больше не гидратирует родительский traceId из запроса, а вместо этого генерирует родительский traceId по умолчанию, который равен 0, что приводит к отключению приложения от других приложений на панели инструментов zipkin.
Я протестировал простой запрос на завивание с заголовкомTraceparent
:curl --location --request GET 'http://localhost:8080/test' --header 'Traceparent: 00-63cf0173620c57b0aed605ee94255089-1444ca74c3d2133a-01'
но этот код не извлекает родительский контекст из заголовка. Любая идея, как заставить это работать?
@RestController
public class Test {
@Autowired
private Tracer tracer;
@GetMapping(path="/test")
public ResponseEntity<?> handleTest() {
ScopedSpan span = tracer.startScopedSpan("test span");
return ResponseEntity.ok();
}
}
пом.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.2</version>
</parent>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-otel</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-sender-urlconnection</artifactId>
</dependency>
1 ответ
Я думаю, что самый простой путь миграции из Sleuth (использует Brave по умолчанию) — через Brave:
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-tracing-bridge-brave'
implementation 'io.zipkin.reporter2:zipkin-reporter-brave'
Кроме того, название
Для повышения совместимости между несколькими протоколами и поощрения успешной интеграции поставщики по умолчанию ДОЛЖНЫ сохранять имя заголовка в нижнем регистре. Имя заголовка представляет собой одно слово без каких-либо разделителей, например дефиса (-).
Поставщики ДОЛЖНЫ ожидать имя заголовка в любом регистре (верхний, нижний, смешанный) и ДОЛЖНЫ отправлять имя заголовка в нижнем регистре.
Не могли бы вы попробовать написать имя в нижнем регистре и открыть вопрос, если он работает только в этом случае?
Я не уверен, что вы пытаетесь сделать в контроллере, но это неправильный способ записи диапазона (см. документы Micrometer Tracing).
Кроме того, у нас есть несколько примеров, где это работает: https://github.com/micrometer-metrics/micrometer-samples.
У нас есть