从OpenTracing迁移至OpenTelemetry:如何实现原有链路追踪行为?
切换到OpenTelemetry后实现类似OpenTracing的
span reported日志 1. 替换依赖
移除原有的OpenTracing及Jaeger Client依赖,改用OpenTelemetry官方的Spring Boot Starter和Jaeger Exporter依赖:
<dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-spring-boot-starter</artifactId> <version>1.32.0</version> <!-- 建议使用最新稳定版 --> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-exporter-jaeger</artifactId> <version>1.32.0</version> </dependency>
2. 配置追踪与日志上报
OpenTelemetry支持配置文件或代码两种方式实现对应原OpenTracing的行为:
方式一:配置文件实现(推荐)
在application.properties中添加以下配置,完全对应原逻辑:
# 服务名称,对应原代码中的"my-service" otel.service.name=my-service # 采样器配置:always_on对应原const类型100%采样率 otel.traces.sampler=always_on # 开启Jaeger上报日志,对应原withLogSpans(true) otel.exporter.jaeger.log-spans=true
OpenTelemetry默认支持从环境变量加载配置,无需额外处理fromEnv()的逻辑。
方式二:代码自定义配置(灵活场景)
如果需要更精细化的控制,可以通过代码创建OpenTelemetry Bean:
import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.exporter.jaeger.JaegerSpanExporter; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.samplers.Sampler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class OpenTelemetryConfig { @Bean public OpenTelemetry openTelemetry() { // 配置Jaeger Exporter并开启日志上报 JaegerSpanExporter jaegerExporter = JaegerSpanExporter.builder() .setLogSpans(true) .build(); // 配置100%采样率的采样器 SdkTracerProvider tracerProvider = SdkTracerProvider.builder() .setSampler(Sampler.alwaysOn()) .addSpanProcessor(io.opentelemetry.sdk.trace.export.SimpleSpanProcessor.create(jaegerExporter)) .build(); return OpenTelemetrySdk.builder() .setTracerProvider(tracerProvider) .buildAndRegisterGlobal(); } }
3. 验证效果
启动应用后,当收到外部请求时,OpenTelemetry会自动为请求生成Span,并在Span上报时输出类似原span reported的日志(日志格式会包含Span ID、Trace ID等信息,核心行为与原逻辑一致)。
内容的提问来源于stack exchange,提问作者ahrooran
相关产品推荐
相关产品推荐

