基于 Zipkin的链路追踪

Zipkin介绍:

Zipkin 是 Twitter 的一个开源项目,它基于 Google Dapper 实现,它致力于收集服务的定时数据,

以 解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。 我们可以使用它来收集各个服务器

上请求链路的跟踪数据,并通过它提供的 REST API 接口来辅助我们查询跟踪数据以实现对分布式系 统的监控程序,

从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源。除了面向开发 的 API 接口之外,

它也提供了方便的 UI 组件来帮助我们直观的搜索跟踪信息和分析请求链路明细,比 如:可以查询某段时间内各用户

请求的处理时间等。 Zipkin 提供了可插拔数据存储方式:In-Memory、  MySql、Cassandra 以及 Elasticsearch。

 

上图展示了 Zipkin 的基础架构,它主要由 4 个核心组件构成:

  • Collector:收集器组件,它主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为Zipkin 内部处理的 Span 格式,以支持后续的存储、分析、展示等功能。
  • Storage:存储组件,它主要对处理收集器接收到的跟踪信息,默认会将这些信息存储在内存中,我们也可以修改此存储策略,通过使用其他存储组件将跟踪信息存储到数据库中。
  • RESTful API:API 组件,它主要用来提供外部访问接口。比如给客户端展示跟踪信息,或是外接系统访问以实现监控等。
  • Web UI:UI 组件,基于 API 组件实现的上层应用。通过 UI 组件用户可以方便而有直观地查询和分析跟踪信息。 

Zipkin 分为两端,一个是 Zipkin 服务端,一个是 Zipkin 客户端,客户端也就是微服务的应用。

客户端会配置服务端的 URL 地址,一旦发生服务间的调用的时候,会被配置在微服务里面的 Sleuth 的监听器监听,并生成相应的 Trace 和 Span 信息发送给服务端。

发送的方式主要有两种,一种是 HTTP 报文的方式,还有一种是消息总线的方式如 RabbitMQ

 

不论哪种方式,我们都需要:
  1.一个 Eureka 服务注册中心,这里我们就用之前的 eureka 项目来当注册中心。
  2.一个 Zipkin 服务端
  3.多个微服务,这些微服务中配置Zipkin 客户端。 

 


 

 

Zipkin Server的部署和配置

(1) Zipkin Server下载
从spring boot 2.0开始,官方就不再支持使用自建Zipkin Server的方式进行服务链路追踪,而是直接提供了编译好的 jar 包来给我们使用。
可以从官方网站下载先下载Zipkin的web UI,我们这里下载的是zipkin-server-2.12.9-exec.jar
 
(2)启动
在命令行输入 java -jar zipkin-server-2.12.9-exec.jar 启动 Zipkin Server

 

 

1.默认Zipkin Server的请求端口为 9411
2.Zipkin Server的启动参数可以通过官方提供的yml配置文件查找
3.在浏览器输入 http://127.0.0.1:9411即可进入到Zipkin Server的管理后台

 

 

 

Zipkin客户端+Sleuth整合

通过查看日志分析微服务的调用链路并不是一个很直观的方案,结合zipkin可以很直观地显示微服务之间的调用关系。 

(1)客户端添加依赖 

客户端指的是需要被追踪的微服务 

 


注:

在使用链路追踪的时候,由于我们的服务是首先访问到网关上然后再有网关分配到各个微服务上进行内部调用。
所以我们在网关上也应该添加上链路追踪的依赖与配置。这样在访问的时候才不会出现链路追踪不到的问题

 

posted @ 2022-04-20 10:41  _kerry  阅读(213)  评论(0编辑  收藏  举报