开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第三阶段: Zipkin 介绍和使用】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/685/detail/11900
Zipkin 介绍和使用
内容介绍
一、ZipKin 介绍
二、Zipkin 的基础架构
三、ZipKin 服务端安装
四、Zipkin 客户端集成
一、ZipKin 介绍
Zipkin 是 Twitter 的一个开源项目,它基于 Google Dapper 实现,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。这是 Zipkin 的核心功能,分辨对应四个核心组件。
我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的RESTAP!接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序,从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源。
除了面向开发的 API 接口之外,它也提供了方便的UI组件来帮助我们直观的搜索跟踪信息和分析请求链路明细,比如:可以查询某段时间内各用户请求的处理时间等。
Zipkin 提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。
二、Zipkin 的基础架构
它主要由4个核心组件构成:
1.第一个组件 Collector
Collector:
收集器组件,它主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为Zipkin 内部处理的 Span 格式,以支持后续的存储、分析、展示等功能。
作用是收集分布式系统推送来的链路追踪数据,数据会被收集器收集起来,会被它传递给第二个存储组件。
2.第二个组件 Storage
Storage:存储组件,它主要对处理收集器接收到的跟踪信息,默认会将这些信息存储在内存中,我们也可以修改此存储策略,通过使用其他存储组件将跟踪信息存储到数据库中,也可以存储到 Elastic search。
3.第三个组件 RESTful API
存储完之后就去 RESTful API:API 组件,调用 API。可它主要用来提供外部访问接口。
比如给客户端展示跟踪信息,或是外接系统访问以实现监控等。
4.第四个组件 Web UI
Web UI:UI 组件,基于 API 组件实现的上层应用。通过UI组件用户可以方便而有直观地查询和分析跟踪信息。这是内置好的查询界面,通过查询条件去查询 api,去里面拿数据。
Zipkin 分为两端,一个是 Zipkin 服务端,一个是 zipkin 客户端,服务端是单独跑的一个炸包,客户端以依赖的方式放在微服务中,向服务端推送数据,服务端查找或展现。
客户端会配置服务端的 URL 地址,一旦发生服务间的调用的时候,会被配置在微服务里面的 Sleuth 的监听器监听,并生成相应的 Trace 和 Span 信息发送给服务端。
三、 ZipKin 服务端安装
1.下载 ZipKin的jar 包
https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec
访问上面的网址,即可得到一个 jar 包,这就是 ZipKin 服务端的 jar 包
2.通过命令行,输入下面的命令启动 ZipKin Server
java -jar zipkin-server-2.12.9-exec.jar
3.通过浏览器访问 http://localhost:9411访问
这就是 ui 界面,可以输入各种各样的条件进行过滤和检索,当然现在是没有任何数据的,因为客户端还没有推送数据。
四、Zipkin客户端集成
ZipKin 客户端和 Sleuth 的集成非常简单,只需要在微服务中添加其依赖和配置即可。
1.在每个微服务上添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifa[tId>spring-cloud-starter-zipkin</artifactId>
</dependency>
2.添加配置
启动前先修改配置,客户端的微服务需要向客户端推送数据,需要在每个客户端配置服务端的地址,打开配置文件,
spring:
zipkin:
base-ur1:http://127.0.0.1:9411
#zi
pkin server
的请求地址,需要通过这个地址推送链路追踪数据
discoveryClientEnabled:false #
让 nacos 把它当成一个 URL,而不要当做服务名
sleuth:
sampler:
probability:1.0 #
采样的百分比
//意味着客户端向服务端推送数据可以配置一个百分比,并不是所有数据都需要被推送的。调试范围在0.0到1.0之间。
3.访问微服务
http://localhost:7000/order-serv/order/prod/1
此时三个节点都需要配置,配置完成后,需要把三个微服务重新启动一下,去ui界面看看能不能看到结果。再次刷新。
4.访问 zipkin 的 UI 界面,观察效果
可以看到非常具体的信息,可以看到每一个的耗时情况。此时说明问题出在 service 之中。
5.点击其中一条记录,可观察一次访问的详细线路。
此时就定位到问题了,此时完成了链路追踪的展示。这里还有更加详细的信息,比如耗费多少时间,在这里都有更加详细的解释。路径、方法、trace id 和 span id等都可以看到。
此时完成了 Zipkin 的集成,但是内容都是存储到 Zipkin 中的,一旦退出将无法保存,这也是一个问题。