Spring Cloud链路跟踪:Sleuth+Zipkin

目录

1 Zipkin Server

2 服务提供者

2.1 pom.xml

2.2 application.properties

3 服务消费者

3.1 pom.xml

3.2 application.properties

4 运行及结果


在微服务的架构中,一次请求可能会涉及到十几次乃至几十次微服务之间的内部调用,这些服务相互之间通过HTTP进行交互,一旦出现bug或者性能瓶颈的时候,查找问题起来会花费很大的工作量。所以分布式链路跟踪就是解决这样的问题的。

Spring Cloud Sleuth为Spring Cloud实现了分布式链路跟踪解决方案。通过它我们可以清楚地知道一次调用经过了多少个微服务以及相应的耗时是多少。Zipkin是一个开源的分布式跟踪系统,它可以收集服务的定时数据,解决延迟问题。Zipkin提供一个Web前端可以轻松地收集和分析数据,例如用户每次请求服务的处理时间等,来方便的监测系统中存在的瓶颈。

笔者使用的Java版本是jdk-8u201,IDE使用的是IntelliJ IDEA 2019.3 x64,Spring Boot的版本是2.1.7.RELEASE,Spring Cloud的版本是Greenwich.SR2。同时本文所使用的项目代码沿用笔者之前写过的文章《Spring Cloud服务治理:Eureka+OpenFeign》中的项目代码,并在此基础上进行继续开发。


1 Zipkin Server

Zipkin可以选择自己搭建项目,但从Spring Cloud Finchley版本开始,这种方式就已经不被推荐了,而是需要我们单独的安装Zipkin软件来实现数据的收集。可选的下载地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/,笔者下载的是zipkin-server-2.12.9-exec.jar这个版本。下载成功后就可以通过下面这条命令来运行了:

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

2 服务提供者

服务提供者延续笔者之前写过的代码hello-service。

2.1 pom.xml

pom.xml继续沿用之前的代码,并且加上以下的依赖:

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

2.2 application.properties

配置文件继续沿用之前的代码,并且加上以下的配置:

spring.sleuth.web.client.enabled=true
spring.sleuth.sampler.probability=1.0
spring.zipkin.base-url=http://localhost:9411
spring.zipkin.discovery-client-enabled=false
spring.zipkin.enabled=true
spring.zipkin.sender.type=web
  • spring.sleuth.web.client.enabled:表示开启链路追踪;
  • spring.sleuth.sampler.probability:表示追踪信息导出到Zipkin的比例,这里默认是0.1,即10%的追踪信息导出到Zipkin,我们这里将其配置为1.0;
  • spring.zipkin.base-url:表示指定Zipkin Server的地址;
  • spring.zipkin.discovery-client-enabled:false表示将Zipkin当成一个URL,而不是服务名称;
  • spring.zipkin.enabled:表示开启Zipkin;
  • spring.zipkin.sender.type:表示设置追踪信息的发送类型(可以选择RabbitMQ或Kafka,这里选择的是HTTP的方式)。

3 服务消费者

服务消费者延续笔者之前写过的代码feign-consumer。并且需要添加的内容和上面服务提供者需要添加的代码是一样的。

3.1 pom.xml

pom.xml继续沿用之前的代码,并且加上以下的依赖:

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

3.2 application.properties

配置文件继续沿用之前的代码,并且加上以下的配置:

spring.sleuth.web.client.enabled=true
spring.sleuth.sampler.probability=1.0
spring.zipkin.base-url=http://localhost:9411
spring.zipkin.discovery-client-enabled=false
spring.zipkin.enabled=true
spring.zipkin.sender.type=web

4 运行及结果

依次启动eureka-server、hello-service和feign-consumer,启动成功后访问URL:http://localhost:9001/feign-consumer来进行一次请求访问。然后访问Zipkin的web端界面地址:http://localhost:9411/来查看结果,如下所示:

点开第一条调用记录,可以看到具体微服务所花费的时间:

再点击其中的/hello接口,还可以看到具体的接口以及调用相关信息,以及Sleuth的trace、span和父id:

发布了62 篇原创文章 · 获赞 80 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_30342639/article/details/104201980