spring-cloud-sleuth-zipkin实现微服务的链路跟踪

spring-cloud-sleuth-zipkin实现微服务的链路跟踪

简介

在微服务数量较多的系统架构中,一个完整的HTTP请求可能需要经过好几个微服务。如果想要跟踪一条完整的HTTP请求链路所产生的日志,我们需要到各个微服务上去查看日志并检索出我们需要的信息。随着业务发展,微服务的数量也会越来越多,这个过程也变得愈发困难。不过不用担心,spring-cloud-sleuth-zipkin为我们提供了分布式服务跟踪的解决方案。

sleuth: 为我们生成了请求链路信息,虽然我们已经可以通过Trace ID来跟踪整体请求链路了,但是我们还是得去各个系统中捞取日志。在并发较高得时候,日志是海量的,这个时候我们可以借助zipkin来代替我们完成日志获取与分析。

zipkin: 主要有四个组件,可以帮助我们收集由sleuth产生的请求链路信息,并保存到MySQL或者Elasticsearch中,并通过web页面分析与跟踪请求日志。这里提一句:最新版本的zipkin还不支持6.0.0以上版本的Elasticsearch

  1. Collector:收集器,负责收集日志信息,以供后续的存储,分析与展示;
  2. Storage:存储模块,我们可以通过它将日志存储到MySQL或者Elasticsearch中。
  3. RESTful API:API组件,它主要用来提供外部访问接口。 比如给客户端展示跟踪信息,或是外接系统访问以实现监控等;
  4. WEB UI:通过web页面,我们可以轻松的分析与跟踪请求日志。

构建

在Spring Cloud为Finchley版本时,如果只需要默认的实现,则不需要自己构建Zipkin Server了,只需要下载jar即可,下面我基于Spring Cloud最新版Hoxton.SR4,Spring Boot采用2.3.0版本构建spring-cloud-sleuth-zipkin的demo项目。

zipkin下载地址:戳我,这里我下载的是目前最新版本的zipkin-server-2.12.9-exec.jar
spring-cloud-sleuth-zipkin实现微服务的链路跟踪

zipkin整合mysql启动服务:

java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=mysql --MYSQL_DB=zipkin --MYSQL_USER=root --MYSQL_PASS=123456 --MYSQL_HOST=localhost --MYSQL_TCP_PORT=3306

zip整合Elasticsearch启动服务:

java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=elasticsearch --DES_HOSTS=http://localhost:9200

默认端口是9411,访问地址http://localhost:9411/
spring-cloud-sleuth-zipkin实现微服务的链路跟踪

另外demo项目主要由eureka注册中心zuul服务网关server-provider服务提供者server-consumer服务消费者zipkin-server等几部分组成,如上图所示。

演示

server-provider服务提供者提供接口UserController,由server-consumer服务消费者在TestController中去调用。启动项目,请求接口:http://localhost:8888/consumer/user

预期结果:

请求路径:zuul->server-consumer:TestController:/get/user->UserService->server-provider:UserController:/get

访问zipkin检验结果:
spring-cloud-sleuth-zipkin实现微服务的链路跟踪

spring-cloud-sleuth-zipkin实现微服务的链路跟踪

spring-cloud-sleuth-zipkin实现微服务的链路跟踪

依赖分析:
spring-cloud-sleuth-zipkin实现微服务的链路跟踪

总结

通过zipkin可以有效的帮助我们记录微服务中的请求链路、请求时间、微服务间的依赖关系等信息。尤其是针对多个微服务的项目,可以方便我们有效的理解服务间的调用关系,查错等。

演示项目地址

戳我

上一篇:Sleuth服务跟踪大厂高频面试题:整合-Zipkin


下一篇:全链路监控工具pinpoint与zipkin