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

Spring Boot 3.0.0:如何用Micrometer Observation API实现全端点自动traceId/spanId追踪

Spring Boot 3 实现全端点默认TraceId/SpanId追踪(替代Spring Sleuth)

核心方案:依赖自动配置+日志模板

Spring Boot 3 用 Micrometer Tracing 替代了Spring Sleuth,且提供开箱即用的自动配置,完全不需要在每个端点手动编写Observation冗余代码。

1. 添加必要依赖

以Maven为例,引入WebFlux、Micrometer Tracing及Brave桥接(适配Zipkin等追踪系统):

<dependencies>
    <!-- WebFlux 核心依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    <!-- Micrometer Tracing 核心 -->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-tracing</artifactId>
    </dependency>
    <!-- Brave桥接(用于对接Zipkin等主流追踪系统) -->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-tracing-bridge-brave</artifactId>
    </dependency>
    <!-- 可选:Actuator 用于暴露追踪相关端点 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

2. 配置日志自动打印TraceId/SpanId

在application.yml中配置日志格式,让日志自动携带TraceId和SpanId:

logging:
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %X{traceId:-} %X{spanId:-} - %msg%n"
  • %X{traceId:-}:从MDC中获取traceId,不存在则显示空
  • %X{spanId:-}:同理获取spanId

3. 恢复原有端点代码(无需修改)

直接使用你在Spring 2.7.x中的原始代码即可,自动配置会帮你完成所有追踪逻辑:

/*
 List all beers in database
 */
public Mono<ServerResponse> listBeer() {
    return beerService.listBeers(null,  null, PageRequest.ofSize(50), true)
            .flatMap(beerDto -> ServerResponse.ok().bodyValue(beerDto))
            .switchIfEmpty(ServerResponse.notFound().build());
}

原理说明

Spring Boot 3 自动配置了WebFluxObservationAutoConfiguration,会对所有HTTP请求自动创建Observation(对应Trace/Span):

  • 自动管理Span的启动、结束
  • 将TraceId/SpanId注入到Reactor Context及MDC中,确保日志能自动获取
  • 支持跨服务调用的Trace传递(和Sleuth行为一致)

自定义扩展(可选)

如果需要统一修改所有端点的Span名称、添加自定义标签,无需逐个端点修改,只需实现ObservationFilter:

@Component
public class BeerApiObservationFilter implements ObservationFilter {
    @Override
    public Observation.Context map(Observation.Context context) {
        if (context instanceof ServerRequestObservationContext serverContext) {
            // 自定义Span名称,比如加上前缀
            String path = serverContext.getExchange().getRequest().getPath().value();
            context.setName("beer-api:" + path);
            // 添加自定义标签
            context.addLowCardinalityKeyValue("api.module", "beer-management");
        }
        return context;
    }
}

对接Zipkin(可选)

如果需要将Trace数据上传到Zipkin可视化,只需在配置中添加:

spring:
  zipkin:
    base-url: http://your-zipkin-server:9411
  sleuth:
    sampler:
      probability: 1.0 # 采样率,生产环境可调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:50:49