Spring Cloud Sleuth 分布式请求链路跟踪

Posted by 彭楷淳 on 2021-02-08
Estimated Reading Time 3 Minutes
Words 844 In Total
Viewed Times

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 中添加相关依赖:

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

相关配置

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

1
2
3
4
5
6
spring:
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
probability: 0.1 #设置Sleuth的抽样收集概率

整合 Zipkin 获取及分析日志


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

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

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

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

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

img

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

img

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

img

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

img

使用 Elasticsearch 存储跟踪信息


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

安装 Elasticsearch

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

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

存储到 Elasticsearch

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

1
2
# 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 的话,可以看到里面已经存储了跟踪信息:

img

更多启动参数参考:github.com/openzipkin/…

更多干货请移步:https://antoniopeng.com


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !