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的结合提供了一套强大的解决方案,帮助我们在微服务环境中实现分布式链路追踪。通过这个Demo程序,我们可以学习如何配置和使用这些工具,以便更好地理解和调试我们的...
实现springcloud微服务之间的调用traceId跟踪,并结合zipkin实现图形化调用链路的展示,以及在rocketmq中传递traceId的实现
Spring Cloud Sleuth 和 Zipkin 是两个非常流行的工具,用于实现微服务架构中的链路追踪。本篇将详细介绍这两个组件以及如何在Windows环境下进行初步使用。 **Spring Cloud Sleuth** Spring Cloud Sleuth 是一个...
Spring Cloud Sleuth:分布式请求链路跟踪 Spring Cloud Sleuth 是一种分布式系统中跟踪服务间调用的工具,它可以直观地展示出一次请求的调用过程。在大型分布式系统中,服务之间的调用关系非常复杂,使用 Spring ...
Spring Cloud 分布式整合 Zipkin 的链路跟踪详解 知识点1:为什么使用 Zipkin? 在分布式系统中,服务之间的调用关系非常复杂,导致日志查找和调用关系追踪变得困难。Zipkin 可以解决这个问题,它可以将链路调用...
Spring Cloud Zipkin 是一个流行的链路追踪工具,它与 Spring Boot 和 Spring Cloud 结合使用,可以轻松地在微服务架构中实现分布式系统的可观测性。本教程将介绍如何整合 Spring Cloud 与 Zipkin 来实现链路追踪,...
通过集成Spring Cloud Sleuth和Zipkin,我们可以在Spring Boot应用中实现分布式追踪,这对于调试和监控微服务架构中的应用至关重要。同时,通过在Vue.js前端集成追踪信息,可以实现端到端的全链路追踪。这种方法不仅...
毕业设计基于SpringCloud微服务分布式链路追踪系统源码 追踪实现 使用zipkin+sleuth实现 这个是比较成熟的分布式链路追踪实现方案 拦截器自定义实现 基于Google Dapper 论文,进行自定义实现。 原理: traceId :...
Spring Cloud Sleuth 是一个用于分布式系统跟踪的工具,它是基于 Zipkin 的,可以方便地集成到基于 Spring Boot 和 Spring Cloud 的微服务架构中。通过 Sleuth,我们可以轻松地收集和分析服务间的调用链路数据,从而...
RabbitMQ柔性事务方案、SpringCloud-Gateway网关、Feign远程调用、Sleuth+Zipkin链路追踪系统、Spring Cache缓存、SpringSession跨子域Session同步方案、基于ElasticSearch7全文检索、异步编排与线程池、压力测试...
SpringCloud核心组件Sleuth链路追踪 SpringCloud核心组件Zipkin分布式追踪系统 SpringCloud核心组件Stream消息流处理 SpringCloud核心组件Kafka消息中间件集成 SpringCloud核心组件Gateway新一代API网关 Spring...
**Spring Cloud Sleuth 实现微服务跟踪源码详解** 在当今的云计算时代,微服务架构已经成为构建大型分布式系统的一种主流模式。微服务架构将单一应用程序分解为一组小的服务,每个服务都运行在其自己的进程中,服务...
Spring Cloud Sleuth是Spring Cloud生态系统的一部分,它实现了分布式追踪的标准——OpenTracing和Zipkin。通过集成Sleuth,开发者可以在不修改代码的情况下,轻松地在微服务架构中实现请求的全链路追踪。 二、核心...
本项目"spring-cloud-learning:Springcloud + rabbitmq + kafka + slueth + zipkin + lcn + redis"是针对Spring Cloud的一系列实践教程,涉及到的关键技术包括: 1. **Spring Cloud Eureka**:注册与发现服务,它是...
核心组件: ...Apache Dubbo作为服务调用(RPC)框架 Seata 解决分布式事务 网关使用Spring Cloud Gateway,集成Sentinel熔断限流 ...使用Spring Cloud Sleuth + ZipKin 的链路追踪 使用ElasticSearch全文搜索
本文将深入探讨如何在Spring Boot项目中集成Spring Cloud Sleuth和Zipkin,以及这两个组件如何协同工作,实现强大的分布式追踪功能。 首先,Spring Cloud Sleuth通过AOP(面向切面编程)技术,自动地在微服务间的...
Sleuth是Spring Cloud提供的分布式追踪解决方案,它支持Zipkin、ELK Stack等追踪系统,帮助分析微服务架构中请求的全链路。 以上就是SpringCloud的核心组件及其作用,掌握这些知识点,能够有效地构建出高可用、高...
总结来说,"spring-cloud-sleuth-zipkin-example" 展示了如何利用 Spring Cloud Sleuth 在微服务架构中实现分布式追踪,并将这些信息可视化展示在 Zipkin UI 上。这不仅提高了问题排查的效率,也为系统的健康运行...
在Spring Cloud体系中,链路跟踪的实现一般依赖于Spring Cloud Sleuth与Zipkin。Spring Cloud Sleuth类似于一个中间件,可以在微服务调用过程中,将每个服务的调用记录下来。它会在日志中添加一些特有的标签,如...
Spring Cloud Sleuth是Spring Cloud生态中的一个分布式追踪解决方案,它用于解决微服务架构中的服务调用链路追踪问题。在微服务架构中,一个业务请求往往需要多个服务的协同处理,服务之间的调用关系错综复杂。为了...