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集成依赖,例如:
配置无需额外修改,Micrometer会自动为消息发送生成追踪Span<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> - 消费者服务:同理,消息消费者会自动解析消息头中的追踪元数据,延续追踪链,只需确保引入对应中间件依赖即可
- 兼具两者的服务:同时引入生产者和消费者的对应依赖,使用通用配置即可
4. 统一结论
- 通用部分:所有组件都需要基础的Micrometer Tracing、Metrics、Actuator依赖,以及统一的
management和logging配置,确保追踪上下文传递和日志标准化 - 差异部分:仅在涉及特定组件(如消息中间件)时,添加对应组件的集成依赖,无需额外特殊配置,Micrometer会自动适配
内容的提问来源于stack exchange,提问作者java beginner
相关产品推荐
相关产品推荐

