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

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生效。

验证流程

  1. 启动远程Collector,检查日志确认无启动错误
  2. 启动Spring Boot应用,调用包含数据库操作的API
  3. 查看应用控制台,确认能看到API Span与对应的jdbc.query/jdbc.update类型数据库Span
  4. 查看Collector日志,确认数据已接收并导出至NoSQL
  5. 直接查询NoSQL数据源,验证追踪数据是否存在

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:52:44