zipkin 与 sleuth 实现链路追踪

本文为博主原创,转载请注明出处

1.Zipkin 与 Sleuth 简介

  zipkin 的官网地址: 

https://zipkin.io/

  Zipkin 和 Sleuth 都是由 Twitter 开源的一套用于分布式系统的应用监控工具,它们的主要用途是帮助开发者理解系统的行为,以便更好地优化系统。

Zipkin是一个分布式追踪系统,它可以帮助开发者理解服务之间的调用关系,以及每个服务的性能。Zipkin的基础架构包括四个核心组件:

  • Collector:收集器组件,主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为Zipkin内部处理的Span格式,以支持后续的存储、分析、展示等功能。

  • Storage:存储组件,主要对处理收集器接收到的跟踪信息,默认会将这些信息存储在内存中,我们也可以修改此存储策略,通过使用其他存储组件将跟踪信息存储到数据库中。

  • RESTful API:API组件,主要用来提供外部访问接口。比如给客户端展示跟踪信息,或是外接系统访问以实现监控等。

  • UI:基于API组件实现的上层应用。通过UI组件用户可以方便而有直观地查询和分析跟踪信息。

Zipkin的信息默认是存储在内存中,服务端一旦重启信息将会丢失,但是Zipkin提供了可插拔式的存储。Zipkin支持以下四种存储方式:

  • 内存:服务重启将会失效,不推荐

  • MySQL:数据量越大性能较低

  • Elasticsearch:主流的解决方案,推荐使用

  • Cassandra:技术太牛批,用的人少,自己选择,不过官方推荐

Sleuth是一个用于在基于Spring Cloud的应用中实现分布式追踪的库。Sleuth可以自动收集应用的调用链数据,并将这些数据发送给Zipkin

  在Spring Cloud中,我们可以采用SleuthZipkin来实现全链路追踪,Sleuth负责采集链路信息,Zipkin负责处理展示这些信息。

2.spring cloud项目使用

  在Java项目中使用ZipkinSleuth,需要在项目中添加SleuthZipkin的依赖,然后在配置文件中启用SleuthZipkin。以下是一个使用Maven添加SleuthZipkin依赖的例子:

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

  在配置文件中,需要启用 Sleuth 和 Zipkin ,并指定 Zipkin 的服务地址。以下是一个使用 application.properties配置文件启用 Sleuth 和 Zipkin 的例子:

spring.zipkin.baseUrl=http://localhost:9411/
spring.sleuth.sampler.probability=1.0

  在这个配置中,spring.zipkin.baseUrlZipkin服务的地址,spring.sleuth.sampler.probability是采样率,用于控制Sleuth收集跟踪信息的频率。

  在Spring Cloud中,SleuthZipkin可以帮助我们实现全链路追踪。在使用这两个工具的过程中,我们不需要在代码中写链路追踪相关的功能接入,这是因为Sleuth会自动收集应用的调用链数据,并将这些数据发送给Zipkin

3.zipkin 接入 Elasticsearch

  在结合Elasticsearch使用时,你需要在Zipkin的配置文件中指定存储类型为Elasticsearch,并提供Elasticsearch的连接信息。以下是一个使用Elasticsearch作为存储的Zipkin配置文件的例子:

  1.Zipkin 启动时只需要指定好 Elasticsearch 连接信息即可。如果是通过 jar 包运行,则执行如下命令:

java -jar zipkin-server-2.19.3-exec.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS=192.168.60.133:9200

  2. 如果通过 Docker 镜像运行,则执行如下命令:

docker run --name zipkin -d -p 9411:9411 -e STORAGE_TYPE=elasticsearch -e ES_HOSTS=192.168.60.133:9200 openzipkin/zipkin

  3. Docker Compose 进行启动

services:
  zipkin:
    image: openzipkin/zipkin
    container_name: zipkin
    environment:
      - STORAGE_TYPE=elasticsearch
      - ES_HOSTS=192.168.60.133:9200
      #- RABBIT_ADDRESSES=192.168.60.133:5672
      #- RABBIT_USER=hangge
      #- RABBIT_PASSWORD=123
    ports:
      - 9411:9411

4.链路追踪过程  

  以下是SleuthZipkin的工作过程:

  1. 当一个请求到达系统的入口时,Sleuth会创建一个唯一ID(traceId),这个traceId会在服务之间传递,直到请求的返回,那么就可以使用这个traceId将整个请求串联起来,形成一条完整的链路。

  2. Sleuth会记录每个服务调用的开始时间(cs,Client Send)和结束时间(cr,Client Received),以及服务端接受请求的时间(sr,Server Received)和服务端处理完毕准备发送到客户端的时间(ss,Server Send)。通过这些时间戳,我们可以统计服务调用的耗时。

  3. Sleuth会将这些数据作为Span(基本的工作单元)发送给Zipkin

  4. Zipkin会接收到Sleuth发送过来的Span,然后将这些Span按照traceId进行排序,形成一个完整的调用链。

  5. 我们可以通过Zipkin的Web界面查看这个调用链,以及每个服务的耗时等信息。

 5.启动zipkin

  zipkin-server最新版本下载地址:

https://repo1.maven.org/maven2/io/zipkin/zipkin-server/2.23.2/zipkin-server-2.23.2-exec.jar

  Zipkin server是一个java1.8+服务,打包为一个可执行jar。

java -jar zipkin-server-2.23.2-exec.jar

  浏览器打开地址进入到Zipkin监控页面:

http://127.0.0.1:9411/

 

posted @ 2021-10-17 23:29  香吧香  阅读(28)  评论(0编辑  收藏  举报