Spring Boot中OpenTelemetry自动工具化自定义配置方法未被调用问题
问题排查与解决方案
1. 确认依赖完整性
确保项目引入了OpenTelemetry Spring Boot Starter的正确依赖,AutoConfigurationCustomizerProvider是该starter提供的SPI接口。
- Maven依赖示例:
<dependency> <groupId>io.opentelemetry.instrumentation</groupId> <artifactId>opentelemetry-spring-boot-starter</artifactId> <version>匹配你的Otel核心版本号</version> </dependency>
- Gradle依赖示例:
implementation 'io.opentelemetry.instrumentation:opentelemetry-spring-boot-starter:匹配你的Otel核心版本号'
注意:版本需与OpenTelemetry核心组件保持一致,避免版本冲突。
2. 确保配置类被Spring扫描
OtelConfig类的@Configuration注解需被Spring组件扫描机制识别:
- 检查该类是否位于Spring Boot主应用类(带
@SpringBootApplication注解)的同包或子包下;若不在,需在主应用类添加@ComponentScan(basePackages = "你的OtelConfig所在包路径")指定扫描范围。
3. 手动注册SPI实现(旧版本需注意)
部分早期版本的OpenTelemetry Spring Boot Starter需要通过SPI机制手动注册实现类:
- 在
src/main/resources/META-INF/services目录下创建文件io.opentelemetry.instrumentation.spring.autoconfigure.spi.AutoConfigurationCustomizerProvider; - 文件内写入
OtelConfig类的全限定名,例如:com.yourpackage.OtelConfig。
4. 检查OpenTelemetry自动配置状态
确保未禁用OpenTelemetry自动配置:
- 检查
application.properties/application.yml,若存在otel.springboot.enabled=false,改为true或删除该配置; - 检查主应用类的
@SpringBootApplication注解是否排除了Otel自动配置类(如exclude = {OpenTelemetryAutoConfiguration.class}),若有则移除排除项。
5. 替代方案:直接构建OpenTelemetry实例
若上述方法无效,可绕过自动配置SPI,直接通过@Bean定义配置:
@Configuration public class OtelConfig { @Bean public OpenTelemetry openTelemetry() { return OpenTelemetrySdk.builder() .setTracerProvider(TracerProviderSdk.builder() .setSampler(Samplers.alwaysOn()) .addSpanProcessor(SimpleSpanProcessor.create(JaegerGrpcSpanExporter.builder() .setEndpoint("http://localhost:14250") .build())) .build()) .buildAndRegisterGlobal(); } }
内容的提问来源于stack exchange,提问作者Rakesh Goyal
相关产品推荐
相关产品推荐

