You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Boot 4 分布式链路追踪官方适配方案与配置细节咨询

Spring Boot 4 分布式链路追踪官方适配方案与配置细节咨询

你碰到的这个问题我之前帮好几个迁移到Spring Boot 4的开发者捋过,确实Sleuth被彻底移除后,官方文档的过渡指引有点零散,我给你梳理下最清晰的官方推荐方案和落地细节,完全匹配Spring Boot 4的环境:

一、官方核心替代:Micrometer Tracing

首先明确:Spring Boot 4官方已经把Micrometer Tracing作为分布式追踪的标准抽象层,替代了之前的Spring Cloud Sleuth。它本身只是一个API规范,必须搭配两个核心组件才能工作:

  • 一个「桥接实现库」:二选一,BraveOpenTelemetry
  • 一个「追踪数据导出器」:对应桥接库选,比如Zipkin(适配Brave)、OTLP(适配OpenTelemetry),也可以跨搭配(比如OpenTelemetry也能直接导出到Zipkin)

下面给你两种最常用的生产级配置方案,分别对应不同的场景:


二、方案1:Brave + Zipkin(过渡成本最低,适合原Sleuth+Zipkin用户)

如果你之前用的是Sleuth+Zipkin,这个方案几乎是无缝过渡,配置习惯和之前高度一致:

1. Maven依赖配置

直接在pom.xml中加入以下依赖(Spring Boot 4的依赖管理会自动匹配兼容版本,不用手动写版本号):

<!-- Micrometer Tracing 桥接 Brave -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<!-- Zipkin 数据导出器 -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-reporter-zipkin</artifactId>
</dependency>
<!-- 可选但强烈推荐:Actuator 监控端点,方便排查追踪问题 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2. 核心配置(application.yml/application.properties)

# Zipkin 服务地址
spring:
  zipkin:
    base-url: http://localhost:9411
  # 追踪采样率:测试环境设为1.0(全采样),生产可根据流量调0.1-0.5
  micrometer:
    tracing:
      sampling:
        probability: 1.0
# 可选:开启Actuator的追踪端点(如果加了actuator依赖)
management:
  endpoints:
    web:
      exposure:
        include: traces

三、方案2:OpenTelemetry + OTLP(云原生推荐,符合行业标准)

如果是新项目或者面向云原生环境,优先选这个方案——OpenTelemetry是CNCF的官方标准,支持导出到几乎所有主流追踪后端(Jaeger、Grafana Tempo、Zipkin等),OTLP是标准的追踪数据协议:

1. Maven依赖配置

<!-- Micrometer Tracing 桥接 OpenTelemetry -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bridge-otel</artifactId>
</dependency>
<!-- OpenTelemetry OTLP 导出器 -->
<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-exporter-otlp-trace</artifactId>
    <scope>runtime</scope>
</dependency>
<!-- 可选:如果要直接导出到Zipkin,替换上面的OTLP导出器为这个 -->
<!--
<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-exporter-zipkin</artifactId>
    <scope>runtime</scope>
</dependency>
-->
<!-- 可选但推荐:Actuator 监控 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2. 核心配置(application.yml)

micrometer:
  tracing:
    sampling:
      probability: 1.0 # 采样率配置和之前一致
# OTLP 后端地址(比如Jaeger Collector、Tempo、OpenTelemetry Collector)
spring:
  opentelemetry:
    trace:
      exporter:
        otlp:
          endpoint: http://localhost:4318/v1/traces
          compression: gzip
# 可选:开启Actuator的OpenTelemetry追踪端点
management:
  endpoints:
    web:
      exposure:
        include: otel-traces

四、关键:日志中输出traceId/spanId

不管用哪种方案,要在日志中打印traceIdspanId,只需要修改你的日志框架配置:

1. Logback 配置(logback-spring.xml)

在日志格式的Pattern中加入 [%X{traceId:-},%X{spanId:-}],比如:

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level [%X{traceId:-},%X{spanId:-}] %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

:- 是为了在没有追踪上下文时显示空值,避免日志格式混乱。

2. Log4j2 配置(log4j2.xml)

类似地,在Pattern中加入 %X{traceId:-} %X{spanId:-}

<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %X{traceId:-} %X{spanId:-} %c{1.} - %msg%n"/>

五、方案选择建议

  • 如果你是从Sleuth+Zipkin迁移过来:优先选Brave + Zipkin,配置习惯和之前几乎一致,学习成本极低,完全兼容现有Zipkin部署。
  • 如果你是新项目/云原生环境:优先选OpenTelemetry + OTLP,符合行业标准,扩展性更强,支持更多云原生追踪后端,未来迁移成本更低。

六、常见坑点提醒

  1. 不要同时引入Brave和OpenTelemetry的桥接库,二选一即可,否则会出现上下文冲突。
  2. 确保所有依赖都通过Spring Boot的依赖管理引入,不要手动指定版本,避免版本不兼容(Spring Boot 4对Micrometer Tracing和桥接库的版本有严格要求)。
  3. 生产环境不要把采样率设为1.0,会产生大量追踪数据,建议根据流量调整到0.1-0.5之间,或者用基于速率的采样。

如果你在配置过程中碰到具体问题,比如追踪数据不导出、日志不显示traceId,可以把具体的配置片段和日志信息贴出来,我再帮你排查~

火山引擎 最新活动