我正在尝试在 Kafka 模板中启用可观察性来为事件创建跨度。我正在使用 Jaeger 的本地实例。在 Jaeger 实例中,我可以看到与 S3 存储桶交互相关的跨度,但没有看到与 Kafka 交互的任何内容。当我检查 Kafka 主题中的事件时,它们没有任何包含 spanId 或 traceId 的标头。
我已设定
kafkaTemplate.setObservationEnabled(true)'
。我已将以下内容添加到 application.properties
management.tracing.enabled=true
management.tracing.sampling.probability=1.0
management.tracing.propagation.type=w3c
management.tracing.propagation.produce=w3c
management.tracing.propagation.consume=w3c
management.otlp.tracing.endpoint=http://localhost:4318/v1/traces
我已将以下依赖项添加到服务中
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-otel</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-otlp</artifactId>
</dependency>
我正在使用 Spring Boot 3.2.1 和 Spring Kafka 3.1.1。
我主要在这里遵循本指南: https://piotrminkowski.com/2023/11/15/kafka-tracing-with-spring-boot-and-open-telemetry/
概括答案
kafkaTemplate
实例必须是由Spring管理的bean。如果是这样,将调用 afterSingletonsInstantiated 方法,并设置 ObservationRegistry 对象来代替默认的 ObservationRegistry.NOOP。