目录
- 第一章 Sleuth Zipkin介绍
-
- 1.1、什么是Sleuth
- 1.2、什么是Zipkin
- 第二章 Sleuth Zipkin入门案例
-
- 2.1、项目准备与启动
- 2.2、搭Zipkin服务端
- 2.3、搭Zipkin客户端
- 2.4、链路跟踪的测试
配套资料,免费下载 链接:https://pan.baidu.com/s/1la_3-HW-UvliDRJzfBcP_w 提取码:lxfx 复制这段内容后打开百度网盘手机App,操作更方便哦
第一章 Sleuth Zipkin介绍
1.1、什么是Sleuth
我们已经接触过几种微服务的监控方式,比如:Spring Boot Actuator监控微服务,Spring Boot Admin也是监控微服务,他是把Actuator的数据用可视化的方式呈现出来,Hystrix Dashboard监控Hystrix服务,Hystrix Turbine聚合多个Hystrix服务的监控信息等,接下来我们要讨论的是微服务的“跟踪”。
对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如:
- 如何串联整个调用链路,快速定位问题?
- 如何理清各个微服务之间的依赖关系?
- 如何进行各个微服务接口的性能分折?
- 如何跟踪整个业务流程的调用处理顺序?
Spring Cloud Sleuth为Spring Cloud提供了分布式跟踪的解决方案,它大量借用了Google Dapper、Twitter Zipkin和Apache HTrace的设计,帮我们解决像上面提到的问题。Spring Cloud Sleuth可以追踪10种类型的组件:async、Hystrix,messaging,WebSocket,rxjava,scheduling,Web(Spring MVC Controller,Servlet),WebClient(Spring RestTemplate)、Feign/OpenFegin、Zuul;
Spring Cloud Sleuth对于分布式链路的跟踪仅仅是生成一些数据,这些数据不便于人类阅读,所以我们一般把这种跟踪数据上传给Zipkin Server,由Zipkin通过UI页面统一进行数据的展示。
官方文档地址:https://docs.spring.io/spring-cloud-sleuth/docs/2.2.6.RELEASE/reference/html/
我们通过一张图来了解一个简单的微服务的调用链路:
span(跨度)
span(跨度)是一个基本工作单元,span用一个64位的id唯一标识。除id外,span还包含其他数据,例如描述、时间戳事件、键值对的注解(标签), spanId、parentId等。span被启动和停止时,记录了时间信息。初始化 span被称为”rootspan”,该span的id和trace的id相等。
trace(跟踪)
trace(跟踪)是一组共享”rootspan”的span组成的树状结构,trace也用一个64位的id唯一标识,trace中的所有span都共享该trace的id。
annotation(标注)
annotation(标注)用来记录事件的存在,其中,核心annotation用来定义请求的开始和结束。
CS(Client Sent客户端发送)
客户端发起一个请求,该annotation描述了span的开始。
SR(Server Received服务器端接收)
服务器端获得请求并准备处理它。如果用SR减去CS时间戳,就能得到网络延迟。
SS(Server Sent服务器端发送)
该annotation表明完成请求处理(当响应发回客户端时)。如果用SS减去SR时间戳,就能得到服务器端处理请求所需的时间。
CR(Client Received客户端接收)
客户端发起一个请求,该annotation描述了span的结束。客户端成功接收到服务器端的响应。如果CR减去CS时间戳,就能得到从客户端发送请求到服务器响应的所需的时间。
1.2、什么是Zipkin
Zipkin是Twitter开源的分布式实时数据跟踪系统(Distributed Tracking System),基于Google Dapper的论文设计而成,Google开源了 Dapper链路追踪组件,并在2010年发表了论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,这篇文章是业内实现链路追踪的标杆和理论基础,具有非常大的参考价值。
Zipkin它的主要功能是收集系统的时序数据,从而追踪微服务架构的系统延时等问题,从而达到链路调用监控跟踪作用,另外Zipkin还提供了一个非常友好的UI界面,来帮助分析追踪数据。除此之外,Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。
Zipkin官网地址:http://zipkin.io
分布式跟踪系统有一些成熟的开源产品,比如:韩国Naver的Pinpoint,Apache的HTrace,阿里的鹰眼EagleEye,京东的Hydra等,这些产品我们也把他们叫做APM(应用性能管理)工具。
下图展示了Zipkin的基础架构,它主要由4个核心组件构成:
- Collector:收集器组件,它主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为Zipkin内部处理的Span格式,以支持后续的存储、分析、展示等功能。
- Storage:存储组件,它主要对处理收集器接收到的跟踪信息,默认会将这些信息存储在内存中,我们也可以修改此存储策略,通过使用其他存储组件将跟踪信息存储到数据库中。
- RESTful API:API 组件,它主要用来提供外部访问接口。比如给客户端展示跟踪信息或是外接系统访问以实现监控等。
- Web UI:UI 组件,基于 API 组件实现的上层应用,通过 UI 组件用户可以方便而有直观地查询和分析跟踪信息。
Zipkin分为两端,一个是Zipkin服务端,一个是Zipkin客户端,客户端也就是微服务的应用。客户端会配置服务端的URL地址,一旦发生服务间的调用的时候,会被配置在微服务里面的Sleuth的监听器监听,并生成相应的Trace和Span信息发送给服务端。发送的方式主要有两种,一种是HTTP报文的方式,还有一种是消息总线的方式如:RabbitMQ。
最终我们可以总结出来,Sleuth和Zipkin的关系就好比Spring Boot Actuator和Spring Boot Admin之间的关系,一个用于产生数据,一个用于展示数据。
第二章 Sleuth Zipkin入门案例
2.1、项目准备与启动
我们接下来的所有操作均是在Config
最后完成的工程上进行操作,相关代码请到配套资料中寻找。
我们需要依次启动如下服务:(eureka-server7001会报错,不用管,等eureka-server7002启动后,过一会就恢复正常了)
- eureka-server7001
- eureka-server7002
打开浏览器输入指定的地址:http://localhost:7001/login,登录账号:root,登录密码:123456
2.2、搭Zipkin服务端
(1)到官网下载Zipkin Server
,下载地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
(2)我们下载2.12.9
这个最新的版本,点击进去后,选择第一个,如果你下载失败,可以到配套资料中寻找该jar
包。
(3)输入启动命令启动该jar
包:java -jar zipkin-server-2.12.9-exec.jar
(4)打开浏览器输入Zipkin
的web界面地址:http://localhost:9411/zipkin/
(5)要想查看更加详细的配置和命令请参考:
- 有关zipkin的启动命令可以配置的参数可以看这里:https://github.com/apache/incubator-zipkin/tree/master/zipkin-server
- 有关zipkin配置mysql基础建表语句可以看这里:https://github.com/apache/incubator-zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql
- 有关zipkin本身配置文件可以看这里:https://github.com/apache/incubator-zipkin/blob/master/zipkin-server/src/main/resources/zipkin-server-shared.yml
2.3、搭Zipkin客户端
(1)服务提供者service-provider8001
、service-provider8002
、服务消费者service-consumer9002
、service-consumer9003
,全部添加以下依赖:
pom.xml
代码语言:javascript复制<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>
Jetbrains全家桶1年46,售后保障稳定
(2)服务提供者service-provider8001
、service-provider8002
、服务消费者service-consumer9002
、service-consumer9003
,全部添加以下配置:
application.yaml
代码语言:javascript复制spring:
zipkin:
base-url: http://localhost:9411
sender:
type: web
(3)服务提供者service-provider8001
、service-provider8002
、服务消费者service-consumer9002
、service-consumer9003
,从左向右依次启动:
Eureka:
Console:
2.4、链路跟踪的测试
访问地址:http://localhost:9002/consumer/product/findAll
链路跟踪:http://localhost:9411/zipkin
点击查找:
点击链路:
查看依赖:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/219087.html原文链接:https://javaforall.cn