0%

链路追踪

一、简介

sleuth收集跟踪信息通过http请求发送给zipkin server,zipkin将跟踪信息存储,以及提供RESTful API接口,zipkin ui通过调用api进行数据展示。默认内存存储,可以用mysql,ES等存储。

二、Sleuth

Sleuth是Spring cloud的分布式跟踪解决方案。

概念

  1. span(跨度),基本工作单元。一次链路调用,创建一个span,

    span用一个64位id唯一标识。包括:id,描述,时间戳事件,spanId,span父id。

    span被启动和停止时,记录了时间信息,初始化span叫:root span,它的span id和trace id相等。

  2. trace(跟踪),一组共享“root span”的span组成的树状结构 称为 trace,trace也有一个64位ID,trace中所有span共享一个trace id。类似于一颗 span 树。

  3. annotation(标签),annotation用来记录事件的存在,其中,核心annotation用来定义请求的开始和结束。

    • CS(Client Send客户端发起请求)。客户端发起请求描述了span开始。
    • SR(Server Received服务端接到请求)。服务端获得请求并准备处理它。SR-CS=网络延迟。
    • SS(Server Send服务器端处理完成,并将结果发送给客户端)。表示服务器完成请求处理,响应客户端时。SS-SR=服务器处理请求的时间。
    • CR(Client Received 客户端接受服务端信息)。span结束的标识。客户端接收到服务器的响应。CR-CS=客户端发出请求到服务器响应的总时间。

taceId标识是同一条链路
spanId标识是一个服务的一次请求
parentId将当前请求与上一请求串联,被调用方的parentId是调用方的spanId

三、zipkin

zipkin是twitter开源的分布式跟踪系统

下载最新的稳定版本

1
https://search.maven.org/remote_content?g=io.zipkin&a=zipkin-server&v=LATEST&c=exec

命令下载

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

启动

1
java -jar zipkin-server-2.22.2-exec.jar

四、客户端配置

依赖

1
2
3
4
5
6
7
8
9
10
<!--链路追踪-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<!-- zipkin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

yml配置

1
2
3
4
5
6
7
spring:
#链路跟踪
zipkin:
base-url: http://admin:admin@localhost:9411/
sleuth:
sampler:
rate: 1 #采样比例1

五、服务调用

通过user服务调用pay服务

调用情况:

调用详情:

依赖情况: