Spring Boot Maven应用OpenTelemetry链路追踪配置求助
解决方案
1. 修复数据库访问追踪缺失问题
你当前仅添加了OpenTelemetry核心SDK与API依赖,但JDBC操作的自动追踪需要专门的 instrumentation 组件支持,按以下步骤补充配置:
添加Maven依赖
<!-- JDBC自动追踪依赖 --> <dependency> <groupId>io.opentelemetry.instrumentation</groupId> <artifactId>opentelemetry-jdbc</artifactId> <version>1.32.0</version> <!-- 版本需与你的OTel SDK保持一致 --> </dependency> <!-- Spring Boot自动配置增强(可选,简化配置) --> <dependency> <groupId>io.opentelemetry.instrumentation</groupId> <artifactId>opentelemetry-spring-boot-starter</artifactId> <version>1.32.0</version> </dependency>
代理JDBC数据源
创建配置类将原有数据源包装为OpenTelemetry代理,实现数据库操作的Span捕获:
import io.opentelemetry.instrumentation.jdbc.datasource.OpenTelemetryDataSource; import javax.sql.DataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class OtelDataSourceConfig { @Bean public DataSource tracedDataSource(DataSource originalDataSource, OpenTelemetry openTelemetry) { return new OpenTelemetryDataSource(originalDataSource, openTelemetry); } }
若使用Spring Boot自动配置的数据源,上述代码会自动完成代理,无需额外修改。
2. 本地控制台输出追踪信息
添加日志导出器依赖并配置,实现控制台打印Span详情:
添加日志导出器依赖
<dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-exporter-logging</artifactId> <version>1.32.0</version> </dependency>
应用配置(application.properties)
# 同时启用日志与OTLP导出器 otel.traces.exporter=logging,otlp otel.logs.exporter=logging,otlp # 开启格式化输出,提升可读性 otel.exporter.logging.pretty-print=true # 设置服务标识,便于追踪识别 otel.service.name=your-spring-boot-service
3. 确保追踪数据发送至远程Linux Collector
你已配置otel.exporter.otlp.traces.endpoint,需补充以下检查与配置:
远程Collector的OTLP接收器配置
确保Linux主机上的Collector已启用OTLP接收器,示例otel-collector-config.yaml片段:
receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 processors: batch: exporters: # 此处配置你的自有NoSQL导出器(后续步骤详细说明) logging: # 调试用,可查看Collector是否接收数据 service: pipelines: traces: receivers: [otlp] processors: [batch] exporters: [logging]
应用端补充配置
# 指定OTLP传输协议(默认gRPC,若用HTTP需改为http/protobuf) otel.exporter.otlp.protocol=grpc # 若Collector启用认证,添加头部信息 # otel.exporter.otlp.headers=Authorization=Bearer <your-auth-token>
同时确认应用服务器能访问Collector的4317(gRPC)或4318(HTTP)端口。
4. Collector导出至自有NoSQL数据源
根据你的NoSQL类型,配置对应导出器:
示例1:MongoDB导出
exporters: mongodb: connection_string: "mongodb://your-nosql-host:27017" database: "otel_trace_db" collection: "trace_records"
示例2:Elasticsearch导出
exporters: elasticsearch: endpoints: ["http://your-es-host:9200"] index: "otel-traces-%{+yyyy.MM.dd}"
更新Collector的service.pipelines.traces.exporters,将新增的NoSQL导出器加入,例如exporters: [mongodb, logging],重启Collector生效。
验证流程
- 启动远程Collector,检查日志确认无启动错误
- 启动Spring Boot应用,调用包含数据库操作的API
- 查看应用控制台,确认能看到API Span与对应的
jdbc.query/jdbc.update类型数据库Span - 查看Collector日志,确认数据已接收并导出至NoSQL
- 直接查询NoSQL数据源,验证追踪数据是否存在
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

