Spring Cloud Sleuth为SpringCloud应用实现了一种分布式链路跟踪解决方案,通过Sleuth可以很清楚了解到一个服务请求经过了哪些服务,每个服务处理花费了多长时间。
Sleuth术语
Span
Span是基本的工作单元。Span包括一个64位的唯一ID,一个64位trace码,描述信息,时间戳事件,key-value 注解(tags),span处理者的ID(通常为IP)。
每个trace中会调用若干个服务,为了记录调用了哪些服务,以及每次调用的消耗时间等信息,在每次调用服务时,埋入一个调用记录,称为一个span。
Trace
包含一系列的span,它们组成了一个树型结构。
从客户发起请求(request)抵达被追踪系统的边界开始,到被追踪系统向客户返回响应(response)为止的过程,称为一个 trace。
Annotation
用于及时记录存在的事件。常用的Annotation如下:
cs - Client Sent:客户端发送一个请求,表示span的开始
sr - Server Received:服务端接收请求并开始处理它。(sr-cs)等于网络的延迟
ss - Server Sent:服务端处理请求完成,开始返回结果给服务端。(ss-sr)表示服务端处理请求的时间
cr - Client Received:客户端完成接收返回结果,此时span结束。(cr-sr)表示客户端接收服务端数据的时间
Sleuth的用途:
耗时分析: 通过Sleuth可以很方便的了解到每个采样请求的耗时,从而分析出哪些服务调用比较耗时;
可视化错误: 对于程序未捕捉的异常,可以通过集成Zipkin服务界面上看到;
链路优化: 对于调用比较频繁的服务,可以针对这些服务实施一些优化措施。
Spring Cloud Sleuth 可以结合Zipkin,将信息发送到Zipkin,利用Zipkin的存储来存储信息,利用Zipkin UI来展示数据。
Zipkin是Twitter的一个开源项目,它基于Google Dapper实现,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。
Zipkin原理:基本思路是在服务调用的请求和响应中加入ID,标明上下游请求的关系。利用这些信息,可以可视化地分析服务调用链路和服务间的依赖关系。
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。
Zipkin服务端:
使用Spring Boot 2.x版本后,官方直接提供了编译好的jar包来给我们使用,比如本范例使用的jar包是zipkin-server-2.9.4-exec.jar
到 https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/ 下载相应的jar包。
执行 java -jar zipkin-server-2.9.4-exec.jar 命令启动Zipkin Server,端口默认是9411
在浏览器访问 http://localhost:9411,显示效果如下图:
Zipkin客户端:
在pom.xml文件添加以下依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
在application.properties文件添加以下配置:
#设置采样比例为1.0。默认是0.1 spring.sleuth.enabled=false spring.sleuth.sampler.probability=1.0 spring.sleuth.hystrix.strategy.enabled=ture #Zipkin服务器 spring.zipkin.enabled=false spring.zipkin.base-url=http://localhost:9411/ #docker swarm环境下通过服务名zipkin访问 #spring.zipkin.base-url=http://zipkin:9411
启动注册中心和各个微服务应用,注册中心的主界面最终如下:
访问微服务URL后,在Zipkin Server即可查看到服务的调用关系:
Zipkin Server改用Mysql存储数据:
到 https://github.com/openzipkin/zipkin/tree/master/zipkin-storage 下载mysql的建表脚本
手动创建一个名为zipkin的数据库,执行建表脚本
执行以下命令启动zipkin-server:
java -jar zipkin-server-2.9.4-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=localhost --MYSQL_TCP_PORT=3306 --MYSQL_USER=root --MYSQL_PASS=root
相关推荐
使用Spring Cloud Sleuth+RabbitMQ+Zipkin实现微服务分布式链路追踪,SpringCloud版本使用的是Greenwich.SR1
毕业设计基于SpringCloud微服务分布式链路追踪系统源码 追踪实现 使用zipkin+sleuth实现 这个是比较成熟的分布式链路追踪实现方案 拦截器自定义实现 基于Google Dapper 论文,进行自定义实现。 原理: traceId :...
RabbitMQ柔性事务方案、SpringCloud-Gateway网关、Feign远程调用、Sleuth+Zipkin链路追踪系统、Spring Cache缓存、SpringSession跨子域Session同步方案、基于ElasticSearch7全文检索、异步编排与线程池、压力测试...
Spring Cloud 链路追踪系列教程(一):Spring Cloud Sleuth 整合 Zipkin 分布式系统微服务端点监控:spring boot admin Spring Cloud 端点监控系列教程(一):Spring Boot Admin 监控 分布式系统微服务中间件:...
- [springcloud(十二):使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪](http://www.ityouknow.com/springcloud/2018/02/02/spring-cloud-sleuth-zipkin.html) - [springcloud(十三):Spring Cloud Consul ...
链路追踪组件包括Spring Cloud Sleuth和Zipkin,用于收集调用链路上的数据。 Spring Cloud还提供了一系列的子项目和工具,如Spring Cloud Bus(事件/消息总线)、Spring Cloud Security(基于springsecurity的安全...
Spring Cloud微服务开发实践系列文章,详细介绍了微服务开发流程。 部分内容如下: ...14、分布式链路跟踪和 Spring Cloud Sleuth 15、Zipkin 介绍与实践 16、Nacos 基础用法 17微服务常见面试题分析
SpringCloudSleuth实现了一种分布式的服务链路跟踪解决方案,通过使用Sleuth可以让我们快速定位某个服务的问题。一些概念:1.Span,Span是基本的工作单元。Span包括一个64位的唯一ID,一个64位trace码,描述信息,...
zipkin、rabbitmq、mysql整合的代码类demo,导入即可运行,SpringCloud 必备神器,Zipkin是一个分布式跟踪系统,Sleuth负责为服务之间的调用提供链路追踪,而Zipkin用于收集在微服务体系结构中延迟问题排除所需的定时...
本套课程 是2020年9月全新录制,新一代微服务全家桶零基础到实战课程,采用 ...7)分布式链路追踪Zipkin+Sleuth+Mysql持久化 8)阿里云Docker镜像仓库+ CentOS7.X容器部署 基于旭瑶&小滴课堂在线教育架构拆分微服务
必备神器,Zipkin是一个分布式跟踪系统,Sleuth负责为服务之间的调用提供链路追踪,而Zipkin用于收集在微服务体系结构中延迟问题排除所需的定时数据。通俗来说就是收集各微服务应用的接口调用过程所消耗的时间数据,...
CloudSleuth,Zipkin和案例实战,希望对您的学习有所帮助。微服务架构是一个分布式架构,微服务系统按业务划分服务单元,一个微服务系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性较高, 如果出现了...
Zipkin是一个分布式跟踪系统,Sleuth负责为服务之间的调用提供链路追踪,而Zipkin用于收集在微服务体系结构中延迟问题排除所需的定时数据。通俗来说就是收集各微服务应用的接口调用过程所消耗的时间数据,方便开发...
mall 高并发,分布式架构 尚硅谷谷粒商城实现 微服务 后台管理系统 网关服务 商品系统 全文检索系统 订单系统 购物车系统 ...链路追踪 - Zipkin + Sleuth 线上监控系统 - Prometheus 日志系统 - Ela