You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.0集成Micrometer Tracing与OTLP时类缺失错误排查

问题描述

我有一个基于Spring Boot 3.0、Kotlin的项目,使用Micrometer Tracing(替代Spring Cloud Sleuth),尝试将其连接到Jaeger的OTLP收集器。

配置类

@Configuration
class OpenTelemetryConfiguration(
    @Value("\${otel.exporter.otlp.traces.endpoint:http://localhost:4317}")
    private val tracesEndpoint: String
) {
    @Bean
    fun spanExporter(): SpanExporter =
        OtlpGrpcSpanExporter.builder().setEndpoint(tracesEndpoint).build()

    @Bean
    fun jaegerPropagator(): TextMapPropagator =
        JaegerPropagator.getInstance()

}

Gradle依赖配置

implementation("io.micrometer:micrometer-core:1.11.0")
implementation("io.micrometer:micrometer-tracing:1.1.1")
implementation("io.micrometer:micrometer-registry-prometheus:1.10.5")
implementation("io.micrometer:micrometer-tracing-bridge-otel:1.1.1")
implementation("io.opentelemetry:opentelemetry-sdk:1.26.0")
implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:1.26.0")
implementation("io.opentelemetry:opentelemetry-exporter-common:1.26.0")
implementation("io.opentelemetry:opentelemetry-exporter-otlp:1.26.0")

启动错误信息

Failed to instantiate [io.opentelemetry.sdk.trace.export.SpanExporter]: Factory method 'spanExporter' threw exception with message: io/opentelemetry/exporter/internal/otlp/OtlpUserAgent
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:171)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
    ... 170 common frames omitted
Caused by: java.lang.NoClassDefFoundError: io/opentelemetry/exporter/internal/otlp/OtlpUserAgent
    at io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder.<init>(OtlpGrpcSpanExporterBuilder.java:48)
    at io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter.builder(OtlpGrpcSpanExporter.java:40)
    at com.logindex.geoservice.configuration.OtelConfiguration.spanExporter(OtelConfiguration.kt:19)
    ... 171 common frames omitted
Caused by: java.lang.ClassNotFoundException: io.opentelemetry.exporter.internal.otlp.OtlpUserAgent
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)

该io.opentelemetry.exporter.internal.otlp.OtlpUserAgent类在io.opentelemetry:opentelemetry-exporter-otlp:1.26.0库中不存在,请问缺失了什么依赖?


解决方案
  1. 补充缺失的依赖
    OtlpUserAgent类属于OpenTelemetry的OTLP导出器内部公共模块,你需要添加以下Gradle依赖:
implementation("io.opentelemetry:opentelemetry-exporter-otlp-common:1.26.0")

注意你当前依赖中的opentelemetry-exporter-common和这个是不同的模块,前者是通用导出器工具类,后者是OTLP专属的内部公共模块。

  1. 版本兼容性对齐
    Micrometer Tracing 1.1.x系列与OpenTelemetry 1.25.x版本是官方推荐的兼容组合,你当前使用的OpenTelemetry 1.26.0超出了兼容范围,这也可能引发依赖类找不到的问题。建议将所有OpenTelemetry相关依赖版本降级到1.25.0,或者升级Micrometer Tracing相关依赖到匹配1.26.0的版本。

  2. 推荐使用自动配置替代手动Bean
    实际上你不需要手动编写SpanExporter的Bean,Micrometer Tracing与OpenTelemetry的桥接已经支持通过配置文件自动创建OTLP导出器。只需在application.yml或application.properties中配置以下参数即可:

otel.exporter.otlp.traces.endpoint=http://localhost:4317

这样可以避免手动配置带来的依赖管理问题,同时简化代码。


内容的提问来源于stack exchange,提问作者Victor Mikhailov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:54:56