Spring cloud项目加上 Micrometer+Zipkin 实现链路追踪


前言

文本介绍给Spring cloud项目加上 Micrometer ,以在Zipkin中查看到链路追踪信息。
基本项目介绍在前一篇文章:
spring cloud alibaba + nacos + seata + openFeign 实现AT模式的分布式事务

看到很多教材讲链路追踪是给分布式项目加上 Sleuth ,殊不知,从 Spring Boot 3.0.0 开始,Sleuth 项目被移除了,项目的核心被移到了 Micrometer Tracing 项目上面去了。我们这里使用的是Spring boot 3.3.3,因此,我们要整合的是Micrometer。

本项目地址


一、给各个子项目加入Micrometer依赖?

<!-- https://mvnrepository.com/artifact/io.micrometer/micrometer-core -->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-core</artifactId>
            <version>1.13.5</version>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-observation</artifactId>
            <version>1.13.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.micrometer/micrometer-tracing-bridge-brave -->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing-bridge-brave</artifactId>
            <version>1.3.4</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.zipkin.reporter2/zipkin-reporter-brave -->
        <dependency>
            <groupId>io.zipkin.reporter2</groupId>
            <artifactId>zipkin-reporter-brave</artifactId>
            <version>3.4.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>3.3.4</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.github.openfeign/feign-micrometer -->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-micrometer</artifactId>
            <version>13.5</version>
            <scope>test</scope>
        </dependency>

二、各项目配置Zipkin

management:
  zipkin:
    tracing:
      endpoint: http://localhost:9411/api/v2/spans
  tracing:
    sampling:
      probability: 1.0

三、用docker启动一个Zipkin服务器

docker run -d --name zipkin -p 9411:9411 openzipkin/zipkin

这将会启动一个名为 zipkin 的容器,并将其映射到宿主机的 9411 端口。

四、启动各个项目

启动各个项目,访问:

http://localhost:9001/webclient/test?userId=1

然后我们可以在Zipkin的web页面上看到追踪的信息了
即访问 http://localhost:9411/zipkin ,点击 RUN QUERY,可以看到追踪到的信息。
在这里插入图片描述
至此,我们就可以看到链路追踪的结果了。


参考资料

Micrometer Tracing和Zipkin实现链路追踪

在微服务架构中,链路追踪是确保系统可观测性和问题排查能力的关键组成部分。对于使用 **Spring Cloud 2023.0.1** 和 **Spring Boot 3.2.4** 的项目,推荐采用 **Micrometer Tracing** 结合 **OpenTelemetry** 和后端存储(如 Jaeger、Zipkin 或 Prometheus + Grafana)来构建完整的分布式链路追踪体系。 ### 1. 链路追踪的核心组件 - **TraceID 与 SpanID 生成与透传** Micrometer Tracing 提供了自动的 TraceID 和 SpanID 的生成机制,并支持在 HTTP 请求、消息队列、远程调用等场景中进行透传。 ```java @Bean public Tracer tracer(MeterRegistry registry) { return Tracer.create(registry); } ``` - **日志上下文集成** 通过 MDC(Mapped Diagnostic Contexts)将 TraceID 和 SpanID 注入到日志中,便于日志分析时进行链路关联[^1]。 ```java @Aspect public class TraceLogAspect { @Around("execution(* com.example.service.*.*(..))") public Object logWithTrace(ProceedingJoinPoint joinPoint) throws Throwable { String traceId = Tracer.currentTraceId(); String spanId = Tracer.currentSpanId(); MDC.put("traceId", traceId); MDC.put("spanId", spanId); try { return joinPoint.proceed(); } finally { MDC.clear(); } } } ``` ### 2. 链路数据采集与传输 - **OpenTelemetry Collector** OpenTelemetry Collector 作为中间件,负责接收 Micrometer Tracing 上报的数据,并进行批处理、采样、转换后发送到后端存储系统(如 Jaeger、Zipkin、Prometheus 等)。 - **配置示例(application.yml)** ```yaml management: tracing: sampling: probability: 1.0 logging: level: org.springframework.cloud: level: DEBUG ``` ### 3. 可视化分析 - **Jaeger** Jaeger 是 CNCF 推出的开源分布式追踪系统,支持服务拓扑分析、延迟分布查看、Trace 查看等高级功能。通过 OpenTelemetry Collector 可将数据转发至 Jaeger。 - **Grafana + Prometheus** Prometheus 采集指标数据,Grafana 提供可视化面板,可展示服务调用延迟、错误率等关键指标。 ### 4. 示例:整合 Micrometer Tracing 与 Jaeger ```yaml spring: application: name: order-service cloud: gateway: discovery: locator: enabled: true micrometer: tracing: export: type: OTLP otlp: endpoint: http://localhost:4317 ``` ### 5. 部署建议 - 使用 OpenTelemetry Collector 作为统一的数据接收与处理组件。 - 后端存储根据团队熟悉度选择 Jaeger、Zipkin 或 Prometheus + Grafana。 - 所有服务统一日志格式,并将 TraceID 和 SpanID 写入日志中,便于问题定位。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值