Spring Cloud入门-Sleuth服务链路跟踪(Hoxton版本)

本文详细介绍了SpringCloud Sleuth在微服务架构中的应用,包括如何添加请求链路跟踪功能、整合Zipkin收集和分析日志,以及使用Elasticsearch持久化跟踪信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目使用的Spring Cloud为Hoxton版本,Spring Boot为2.2.2.RELEASE版本

Spring Cloud入门系列汇总

序号内容链接地址
1Spring Cloud入门-十分钟了解Spring Cloudhttps://blog.youkuaiyun.com/ThinkWon/article/details/103715146
2Spring Cloud入门-Eureka服务注册与发现(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103726655
3Spring Cloud入门-Ribbon服务消费者(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103729080
4Spring Cloud入门-Hystrix断路器(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103732497
5Spring Cloud入门-Hystrix Dashboard与Turbine断路器监控(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103734664
6Spring Cloud入门-OpenFeign服务消费者(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103735751
7Spring Cloud入门-Zuul服务网关(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103738851
8Spring Cloud入门-Config分布式配置中心(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103739628
9Spring Cloud入门-Bus消息总线(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103753372
10Spring Cloud入门-Sleuth服务链路跟踪(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103753896
11Spring Cloud入门-Consul服务注册发现与配置中心(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103756139
12Spring Cloud入门-Gateway服务网关(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103757927
13Spring Cloud入门-Admin服务监控中心(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103758697
14Spring Cloud入门-Oauth2授权的使用(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103761687
15Spring Cloud入门-Oauth2授权之JWT集成(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103763364
16Spring Cloud入门-Oauth2授权之基于JWT完成单点登录(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103766368
17Spring Cloud入门-Nacos实现注册和配置中心(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103769680
18Spring Cloud入门-Sentinel实现服务限流、熔断与降级(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103770879
19Spring Cloud入门-Seata处理分布式事务问题(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103786102
20Spring Cloud入门-汇总篇(Hoxton版本)https://blog.youkuaiyun.com/ThinkWon/article/details/103786588

摘要

Spring Cloud Sleuth 是分布式系统中跟踪服务间调用的工具,它可以直观地展示出一次请求的调用过程,本文将对其用法进行详细介绍。

Spring Cloud Sleuth 简介

随着我们的系统越来越庞大,各个服务间的调用关系也变得越来越复杂。当客户端发起一个请求时,这个请求经过多个服务后,最终返回了结果,经过的每一个服务都有可能发生延迟或错误,从而导致请求失败。这时候我们就需要请求链路跟踪工具来帮助我们,理清请求调用的服务链路,解决问题。

给服务添加请求链路跟踪

我们将通过user-service和ribbon-service之间的服务调用来演示该功能,这里我们调用ribbon-service的接口时,ribbon-service会通过RestTemplate来调用user-service提供的接口。

首先给user-service和ribbon-service添加请求链路跟踪功能的支持;

在user-service和ribbon-service中添加相关依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

修改application.yml文件,配置收集日志的zipkin-server访问地址:

spring:
  application:
    name: user-service
  zipkin:
    base-url: http://localhost:9411
   #设置Sleuth的抽样收集概率
  sleuth:
    sampler:
      probability: 0.1

整合Zipkin获取及分析日志

Zipkin是Twitter的一个开源项目,可以用来获取和分析Spring Cloud Sleuth 中产生的请求链路跟踪日志,它提供了Web界面来帮助我们直观地查看请求链路跟踪信息。

SpringBoot 2.0以上版本已经不需要自行搭建zipkin-server,我们可以从该地址下载zipkin-server:repo1.maven.org/maven2/io/z…

下载完成后使用以下命令运行zipkin-server:

java -jar zipkin-server-2.12.9-exec.jar

Zipkin页面访问地址:http://localhost:9411

在这里插入图片描述

启动eureka-sever,ribbon-service,user-service:

在这里插入图片描述

多次调用(Sleuth为抽样收集)ribbon-service的接口http://localhost:8301/user/1 ,调用完后查看Zipkin首页发现已经有请求链路跟踪信息了;

在这里插入图片描述

点击查看详情可以直观地看到请求调用链路和通过每个服务的耗时:

在这里插入图片描述

使用Elasticsearch存储跟踪信息

如果我们把zipkin-server重启一下就会发现刚刚的存储的跟踪信息全部丢失了,可见其是存储在内存中的,有时候我们需要将所有信息存储下来,这里以存储到Elasticsearch为例,来演示下该功能。

安装Elasticsearch

下载Elasticsearch6.2.2的zip包,并解压到指定目录,下载地址:https://www.elastic.co/cn/downloads…

在这里插入图片描述

运行bin目录下的elasticsearch.bat启动Elasticsearch

在这里插入图片描述

修改启动参数将信息存储到Elasticsearch

使用以下命令运行,就可以把跟踪信息存储到Elasticsearch里面去了,重新启动也不会丢失;

# STORAGE_TYPE:表示存储类型 ES_HOSTS:表示ES的访问地址
java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS=localhost:9200 

之后需要重新启动user-service和ribbon-service才能生效,重启后多次调用ribbon-service的接口http://localhost:8301/user/1

如果安装了Elasticsearch的可视化工具Kibana的话,可以看到里面已经存储了跟踪信息:

在这里插入图片描述

更多启动参数参考

https://github.com/openzipkin…

使用到的模块

springcloud-learning
├── eureka-server -- eureka注册中心
├── user-service -- 提供User对象CRUD接口的服务
└── ribbon-service -- ribbon服务调用测试服务

项目源码地址

GitHub项目源码地址

<think>嗯,用户现在的问题是想要将Spring Cloud Sleuth 3.1迁移到兼容Spring Cloud版本。我需要先回顾之前的对话和提供的引用内容,确保回答准确。 首先,用户之前的问题是关于版本兼容的解决方案,现在他们想进行迁移,特别是从Sleuth 3.1开始。根据之前的回答,步骤包括确认版本、匹配版本、检查依赖冲突等。现在需要将这些步骤具体应用到迁移过程中。 根据引用内容,Spring Cloud Sleuth的不同版本对应不同的Spring Cloud Release Train。例如,Sleuth 3.0.x对应Ilford(2020.0.x),而3.1可能属于较新的版本。但用户提到的是迁移Sleuth 3.1到兼容Spring Cloud版本,可能需要确认3.1对应的Release Train。比如,Spring Cloud 2021.0.x(代号Jubilee)可能对应Sleuth 3.1.x。 接下来需要考虑Spring Boot的兼容性。比如,Spring Cloud 2021.0.x通常需要Spring Boot 2.6.x。如果用户当前使用的是旧版的Boot,可能需要升级。同时,用户可能需要检查是否引入了不兼容的依赖,比如Spring Cloud Bus,如引用3中提到的冲突问题,可能需要排除相关依赖或更新版本。 另外,引用5提到自定义TraceIdFilter,如果用户有类似的代码,需要确保在迁移过程中与Sleuth的新版本兼容,比如是否还需要自定义过滤器,或者Sleuth是否已经内置处理。 在迁移步骤中,需要指导用户如何逐步更新依赖,调整版本号,处理可能的冲突,并验证配置。同时,用户可能关心如何确认版本兼容性,如何处理依赖树中的冲突,以及升级后的测试步骤。 最后,生成相关问题时要围绕迁移过程中可能遇到的问题,比如版本兼容性查询、依赖冲突解决、与其他组件的集成问题等。</think>针对从Spring Cloud Sleuth 3.1迁移到兼容Spring Cloud版本的完整指南,以下是分步骤解决方案: --- ### **步骤1:确认Sleuth 3.1的兼容性范围** - **Sleuth 3.1.x** 属于Spring Cloud **2021.0.x(Jubilee)** Release Train[^2]。 - 支持的Spring Boot版本为 **2.6.x**(需与Spring Cloud版本严格匹配): | Spring Cloud Release Train | Sleuth版本 | Spring Boot版本 | |----------------------------|------------|-----------------| | 2021.0.x (Jubilee) | 3.1.x | 2.6.x | | 2020.0.x (Ilford) | 3.0.x | 2.4.x~2.5.x | | Hoxton.SR12 | 2.2.x | 2.3.x | --- ### **步骤2:迁移至目标Spring Cloud版本** #### **场景1:升级到Spring Cloud 2021.0.x** 1. 修改`pom.xml`中的BOM版本: ```xml <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2021.0.8</version> <!-- Jubilee最新版本 --> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` 2. 升级Spring Boot至**2.6.13**(与2021.0.x兼容): ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.13</version> </parent> ``` #### **场景2:降级到旧版本(如Hoxton.SR12)** - 若需兼容旧环境,需**降级Sleuth至2.2.x**,并调整Spring Boot版本: ```xml <!-- Spring Cloud Hoxton.SR12 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR12</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!-- Spring Boot 2.3.x --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.12.RELEASE</version> </parent> ``` --- ### **步骤3:处理依赖冲突** 1. 运行`mvn dependency:tree`检查冲突: ```bash mvn dependency:tree -Dincludes=org.springframework.cloud:spring-cloud-starter-sleuth ``` 2. 排除旧版本依赖(如与Spring Cloud Bus冲突[^3]): ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-core</artifactId> </exclusion> </exclusions> </dependency> ``` --- ### **步骤4:适配代码变更** 1. **Trace ID生成机制**: Sleuth 3.1默认使用**Brave**作为跟踪库(替代早期Zipkin集成),需检查是否依赖旧版API(如自定义`TraceIdFilter`[^5]): ```java // 旧版自定义TraceIdFilter可能需调整 @Bean public Filter traceIdFilter() { return new TracingFilter(braveTracer); // 使用Brave的Tracer } ``` 2. **Zipkin集成变更**: 若使用`spring-cloud-starter-zipkin`[^4],需确认配置格式: ```yaml spring: zipkin: base-url: http://localhost:9411 sleuth: sampler: probability: 1.0 # 采样率 ``` --- ### **步骤5:验证迁移结果** 1. **启动日志检查**: 确认日志Sleuth版本与预期一致: ``` INFO o.s.c.s.s.SleuthAutoConfiguration - Spring Cloud Sleuth version: 3.1.8 ``` 2. **链路追踪测试**: 发送请求并验证Zipkin是否记录完整Trace: ```bash curl http://localhost:8080/api/endpoint ``` 3. **单元测试覆盖**: 重点测试包含`@NewSpan`注解或手动埋点的代码。 --- ### **迁移示例配置** ```xml <!-- 升级至Spring Cloud 2021.0.x + Sleuth 3.1.x --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.13</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2021.0.8</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId> </dependency> </dependencies> ``` --- ### **常见问题处理** 1. **NoSuchMethodError**: 通常是依赖版本不一致导致,使用`mvn dependency:tree`定位冲突库并排除。 2. **Trace ID丢失**: 检查自定义过滤器是否覆盖Sleuth的`TracingFilter`,需调整执行顺序或禁用自定义过滤器。 3. **Zipkin上报失败**: 确认`spring.zipkin.base-url`配置正确,且网络策略允许访问Zipkin服务器。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值