微服务链路追踪zipkin

一、安装zipkin

curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar

二、sleuth概念解析

1、trace

由一组Trace Id相同的Span串联形成一个树状结构。为了实现请求跟踪,当请求到达分布式系统的入口端点时,只需要服务跟踪框架为该请求创建一个唯一的标识(即TraceId),同时在分布式系统内部流转的时候,框架始终保持传递该唯一值,直到整个请求的返回。那么我们就可以使用该唯一标识将所有的请求串联起来,形成一条完整的请求链路

2、span

代表了一组基本的工作单元。为了统计各处理单元的延迟,当请求到达各个服务组件的时候,也通过一个唯一标识(SpanId)来标记它的开始、具体过程和结束。通过SpanId的开始和结束时间戳,就能统计该span的调用时间,除此之外,我们还可以获取如事件的名称。请求信息等元数据。

3、annotation

用它记录一段时间内的事件,内部使用的重要注释:
cs(Client Send)客户端发出请求,开始一个请求的生命
sr(Server Received)服务端接受到请求开始进行处理, timestampSR - timestampCS = 网络延迟(服务调用的时间)
ss(Server Send)服务端处理完毕准备发送到客户端, timestampSS - timestampSR = 服务器上的请求处理时间
cr(Client Reveived)客户端接受到服务端的响应,请求结束。 timestampCR - timestampCS = 请求的总时间

4、采样率

1⃣️spring.sleuth.sampler.probability=X.Y(如配置为1.0,则采样率为100%,采集服务的全部追踪数据),若不配置默认采样率是0.1(即10%)
2⃣️实现bean的方式来设置采样为全部采样(AlwaysSampler)或者不采样(NeverSampler):如
@Bean public Sampler defaultSampler() { return new AlwaysSampler(); }
sleuth采样算法的实现是 Reservoir sampling(水塘抽样)。实现类是 PercentageBasedSampler。

三、zipkin流程图

1、zipkin流程图

在这里插入图片描述
Collector(收集器组件):主要负责收集外部系统跟踪信息,转化为Zipkin内部的Span格式。
Storage(存储组件):主要负责收到的跟踪信息的存储,默认为存储在内存中,同时支持存储到Mysql、Cassandra以及ElasticSearch。
API(Query): 负责查询Storage中存储的数据,提供简单的JSON API获取数据,主要提供给web UI使用。
Web UI(展示组件):提供简单的web界面,方便进行跟踪信息的查看以及查询,同时进行相关的分析。
Instrumented Client 和Instrumented Server,是指分布式架构中使用了Trace工具的两个应用,Client会调用Server提供的服务,两者都会向Zipkin上报Trace相关信息。在Client 和 Server通过Transport上报Trace信息后,由Zipkin的Collector模块接收,并由Storage模块将数据存储在对应的存储介质中,然后Zipkin提供API供UI界面查询Trace跟踪信息。Non-Instrumented Server,指的是未使用Trace工具的Server,显然它不会上报Trace信息。

2、追踪流程

在这里插入图片描述
由上图可以看出,用户的应用发起Http Get(User Request)请求(请求路径/trace),经过spring cloud Sleuth的Trace框架(Trace Instrumentation)拦截,并依次经过如下步骤,最后记录Trace信息到Zipkin中:
记录tags信息;
将当前调用链的Trace信息记录到Http Headers中;
记录当前调用的时间戳(timestamp);
发送http请求,并携带Trace相关的Header,如TraceId:11aa,SpanId:22bb;
调用结束后,记录当次调用所花的时间(duration);
将步骤1-5,汇总成一个Span(最小的Trace单元),上报该Span信息给Zipkin Collector。

四、注意事项以及配置

1、包问题

spring-cloud-sleuth-zipkin + spring-cloud-starter-sleuth 就相当于直接引入 spring-cloud-starter-zipkin,包含spring-cloud-sleuth-core

2、配置

spring.zipkin.enabled=true # 启用
spring.zipkin.compression.enabled=true # 是否压缩
spring.zipkin.base-url=http://127.0.0.1:9411/ # sleuth默认为上报为false, 现设置上报zipkin的服务地址
spring.sleuth.sampler.probability = 1 # span的采样率,默认为 0.1

3、程序集成

spring cloud sleuth可以结合zipkin,将信息发送到zipkin,利用zipkin的存储来存储信息,利用zipkin ui来展示数据。同时也可以只是简单的将数据记在日志中。
仅使用sleuth+log配置 这种方式只需要引入jar包(Maven中加入spring-cloud-starter-sleuth依赖)即可。如果配置log,这样会打印出如下的日志:
[trace-b,671e132878ee472b,84c7a5d82ccfaab9,false] 这些内容:[appname,traceId,spanId,exportable]。
appname:服务名称
exportable:是否是发送给zipkin。

五、两种部署模式

1、sleuth+zipkin+http

sleuth收集跟踪信息通过http请求发给zipkin。这种需要启动一个zipkin,zipkin用来存储数据和展示数据。zipkin如果不配置存储的话,默认是在内存中的。如果存储在内存中,当重启应用后,数据就会丢失了。
在这里插入图片描述

2、sletuh+streaming+zipkin

这种方式通过spring cloud streaming将追踪信息发送到zipkin。spring cloud streaming目前只支持kafka和rabbitmq。Zipkin Collector从消息中间件中读取数据并存储:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值