分布式链路追踪之Spring Cloud Sleuth+Zipkin最全教程

本文介绍了分布式系统中链路追踪的重要性,并对比了几种常见的链路追踪技术,如cat、zipkin、pinpoint和skywalking。重点讲解了Spring Cloud Sleuth的原理和整合步骤,以及如何利用Zipkin进行可视化追踪。通过添加依赖、调整日志级别、创建演示接口和测试,展示了Spring Cloud Sleuth如何与Zipkin配合工作,提供分布式链路追踪的解决方案。同时,文章还涵盖了ZipKin服务端和客户端的搭建,以及如何切换数据传输方式至RabbitMQ,并介绍了Zipkin的持久化方法,推荐在生产环境中使用MySQL或Elasticsearch存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天这篇文章陈某介绍一下链路追踪相关的知识,以Spring Cloud Sleuthzipkin这两个组件为主,后续文章介绍另外一种。

文章的目录如下:

为什么需要链路追踪?

大型分布式微服务系统中,一个系统被拆分成N多个模块,这些模块负责不同的功能,组合成一套系统,最终可以提供丰富的功能。在这种分布式架构中,一次请求往往需要涉及到多个服务,如下图:

服务之间的调用错综复杂,对于维护的成本成倍增加,势必存在以下几个问题:

  • 服务之间的依赖与被依赖的关系如何能够清晰的看到?
  • 出现异常时如何能够快速定位到异常服务?
  • 出现性能瓶颈时如何能够迅速定位哪个服务影响的?

为了能够在分布式架构中快速定位问题,分布式链路追踪应运而生。将一次分布式请求还原成调用链路,进行日志记录,性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。

常见的链路追踪技术有哪些?

市面上有很多链路追踪的项目,其中也不乏一些优秀的,如下:

  • cat:由大众点评开源,基于Java开发的实时应用监控平台,包括实时应用监控,业务监控 。 集成方案是通过代码埋点的方式来实现监控,比如: 拦截器,过滤器等。 对代码的侵入性很大,集成成本较高,风险较大。

  • zipkin:由Twitter公司开源,开放源代码分布式的跟踪系统,用于收集服务的定时数据,以解决微服务架构中的延迟问题,包括:数据的收集、存储、查找和展现。该产品结合spring-cloud-sleuth使用较为简单, 集成很方便, 但是功能较简单。

  • pinpoint:韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入

  • skywalking:SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。

  • Sleuth:SpringCloud 提供的分布式系统中链路追踪解决方案。很可惜的是阿里系并没有链路追踪相关的开源项目,我们可以采用Spring Cloud Sleuth+Zipkin来做链路追踪的解决方案。

Spring Cloud Sleuth是什么?

Spring Cloud Sleuth实现了一种分布式的服务链路跟踪解决方案,通过使用Sleuth可以让我们快速定位某个服务的问题。简单来说,Sleuth相当于调用链监控工具的客户端,集成在各个微服务上,负责产生调用链监控数据。

Spring Cloud Sleuth只负责产生监控数据,通过日志的方式展示出来,并没有提供可视化的UI界面。

学习Sleuth之前必须了解它的几个概念:

  • Span:基本的工作单元,相当于链表中的一个节点,通过一个唯一ID标记它的开始、具体过程和结束。我们可以通过其中存储的开始和结束的时间戳来统计服务调用的耗时。除此之外还可以获取事件的名称、请求信息等。

  • Trace:一系列的Span串联形成的一个树状结构,当请求到达系统的入口时就会创建一个唯一ID(traceId),唯一标识一条链路。这个traceId始终在服务之间传递,直到请求的返回,那么就可以使用这个traceId将整个请求串联起来,形成一条完整的链路。

  • Annotation:一些核心注解用来标注微服务调用之间的事件,重要的几个注解如下:

    • cs(Client Send):客户端发出请求,开始一个请求的生命周期
    • sr(Server Received):服务端接受请求并处理;sr-cs = 网络延迟 = 服务调用的时间
    • ss(Server Send):服务端处理完毕准备发送到客户端;ss - sr = 服务器上的请求处理时间
    • cr(Client Reveived):客户端接受到服务端的响应,请求结束; cr - sr = 请求的总时间

Spring Cloud 如何整合Sleuth?

整合Spring Cloud Sleuth其实没什么的难的,在这之前需要准备以下三个服务:

  • gateway-sleuth9031:作为网关服务
  • sleuth-product9032:商品微服务
  • sleuth-order9033:订单微服务

三个服务的调用关系如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值