Sleuth
一 引言
随着服务的越来越多,对调⽤链的分析会越来越复杂。它们之间的调⽤关系也许如下图:
问题:
1:微服务之间的调⽤错综复杂,⽤户发送的请求经历那些服务,调⽤链不清楚,没有⼀ 个⾃动化⼯具来维护调⽤链。
2:⽆法快速定位调⽤链中哪个环节出了问题
二 Sleuth简介
1 SpringCloud-Sleuth
-
SpringCloud-Sleuth 提供的分布式系统中链路追踪解决⽅案
-
同类产品:
-
SkyWalking是本⼟开源的基于字节码注⼊的调⽤链分析,以及应⽤监控分析⼯具。特点 是⽀持多 种插件,UI功能较强,接⼊端⽆代码侵⼊。⽬前已加⼊Apache孵化器。
-
cat 由⼤众点评开源,基于Java开发的实时应⽤监控平台,包括实时应⽤监控,业务监控 。 集成⽅案是通过代码埋点的⽅式来实现监控。
-
2 Sleuth术语
-
span:
代表了⼀组基本的⼯作单元。为了统计各处理单元的延迟,当请求到达各个服务组件的 时候,也通过⼀个唯⼀标识(SpanId)来标记它的开始、具体过程和结束。通过SpanId 的开始和结束时间戳,就能统计该span的调⽤时间,除此之外,我们还可以获取如事件 的名称。请求信息等元数据。
-
Trace:
由⼀组Trace Id相同的Span串联形成⼀个树状结构。为了实现请求跟踪,当请求到达分 布式系统的⼊⼝端点时,只需要服务跟踪框架为该请求创建⼀个唯⼀的标识(即 TraceId),同时在分布式系统内部流转的时候,框架始终保持传递该唯⼀值,直到整个 请求的返回。那么我们就可以使⽤该唯⼀标识将所有的请求串联起来,形成⼀条完整的请求链路。
-
Annotation:⽤它记录⼀个完成请求的4个事件,内部使⽤的重要注释:
-
cs(Client Send)客户端发出请求,开始⼀个请求的⽣命
-
sr(Server Received)服务端接受到请求开始进⾏处理, sr-cs = ⽹络延迟(服务调⽤ 的时间)
-
ss(Server Send)服务端处理完毕准备发送到客户端,ss - sr = 服务器上的请求处理时 间
-
cr(Client Reveived)客户端接受到服务端的响应,请求结束。 cr -cs = 请求的总时间
-