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

Spring Boot 3微服务:非Sleuth的Micrometer可观测性与追踪配置疑问

基于Spring Boot 3 + Micrometer的微服务可观测性与追踪实现

一、用Micrometer替代Sleuth实现微服务可观测性与追踪

Spring Boot 3已官方采用Micrometer Tracing替代Spring Cloud Sleuth,核心逻辑是通过Micrometer Tracing生成全链路追踪数据,结合Micrometer Metrics采集监控指标,同时配合日志框架传递追踪上下文,实现完整的可观测能力。具体实现步骤如下:

1. 核心依赖引入

所有微服务组件(网关、注册中心、业务服务)都需要基础可观测性依赖,以Maven为例:

<!-- Micrometer Tracing核心(替代Sleuth) -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<!-- 日志上下文传递(自动为日志添加traceId/spanId) -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-otel-autoconfigure</artifactId>
</dependency>
<!-- Micrometer Metrics核心(监控指标采集) -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-core</artifactId>
</dependency>
<!-- Spring Boot Actuator(暴露监控端点) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

若需将追踪数据导出到Zipkin、Jaeger等可视化平台,需额外添加对应导出器依赖,例如Zipkin:

<dependency>
    <groupId>io.zipkin.reporter2</groupId>
    <artifactId>zipkin-reporter-brave</artifactId>
</dependency>

2. 基础配置(application.yml)

所有组件通用的核心配置,确保追踪、日志、监控的统一:

management:
  endpoints:
    web:
      exposure:
        include: health,metrics,prometheus  # 按需暴露监控端点
  tracing:
    sampling:
      probability: 1.0  # 全量采样,生产环境可调整为0.1等比例
  metrics:
    tags:
      application: ${spring.application.name}  # 给监控指标打上服务名称标签

logging:
  pattern:
    level: "%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]"  # 日志中打印traceId/spanId

3. 追踪上下文自动传递

Micrometer Tracing会自动处理HTTP调用(Feign、RestTemplate)、消息队列(Kafka、RabbitMQ)的追踪上下文传递:

  • HTTP调用时,自动在请求头中添加traceparent字段,下游服务解析后延续追踪链
  • 消息生产/消费时,自动将追踪元数据嵌入消息头,确保跨服务、跨中间件的链路完整

4. 自定义业务监控指标

若需采集业务相关指标,可通过MeterRegistry实现:

@Service
public class OrderService {
    private final Counter orderCreatedCounter;

    public OrderService(MeterRegistry meterRegistry) {
        this.orderCreatedCounter = Counter.builder("order.created.total")
                .description("Total number of created orders")
                .register(meterRegistry);
    }

    public void createOrder() {
        // 业务逻辑处理
        orderCreatedCounter.increment();
    }
}

二、不同微服务组件的依赖与配置差异

大部分基础依赖和配置是通用的,仅在特定组件场景下存在少量差异:

1. 服务注册中心(Eureka、Nacos等)

  • 依赖:仅需基础可观测性依赖,注册中心自身的Spring Boot Starter已集成基础监控能力
  • 配置:直接使用通用的management和logging配置,确保注册中心自身的监控端点暴露、日志携带追踪ID即可
  • 注意:部分注册中心(如Eureka Server)需确保Actuator端点正常开启,方便监控其运行状态

2. Spring Cloud Gateway

  • 依赖:在基础依赖外,需引入spring-cloud-starter-gateway,Micrometer Tracing会自动为网关路由请求生成追踪数据,无需额外配置
  • 配置:通用配置即可,网关会自动将追踪上下文传递给下游服务,同时自身的路由请求会被纳入全链路追踪

3. 业务服务(生产者/消费者/兼具两者)

  • 生产者服务:若涉及消息生产(如Kafka),需添加对应中间件的Micrometer集成依赖,例如:
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
    </dependency>
    
    配置无需额外修改,Micrometer会自动为消息发送生成追踪Span
  • 消费者服务:同理,消息消费者会自动解析消息头中的追踪元数据,延续追踪链,只需确保引入对应中间件依赖即可
  • 兼具两者的服务:同时引入生产者和消费者的对应依赖,使用通用配置即可

4. 统一结论

  • 通用部分:所有组件都需要基础的Micrometer Tracing、Metrics、Actuator依赖,以及统一的management和logging配置,确保追踪上下文传递和日志标准化
  • 差异部分:仅在涉及特定组件(如消息中间件)时,添加对应组件的集成依赖,无需额外特殊配置,Micrometer会自动适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:56:52