概念

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

 

zipkin 由4个部分组成:

Collector、Storage、Restful API、Web UI组成

采集器,存储器,接口,UI。

 

原理

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

默认内存存储,可以用mysql,ES等存储。

 

zipkin 架构

链路监控框架java springcloud链路监控原理_客户端

 

基础数据

 

  1. span(跨度),基本工作单元。一次链路调用,创建一个span,
  2. span用一个64位id唯一标识。包括:id,描述,时间戳事件,spanId,span父id。
  3. span被启动和停止时,记录了时间信息,初始化span叫:root span,它的span id和trace id相等。
  4. trace(跟踪),一组共享“root span”的span组成的树状结构 称为 trace,trace也有一个64位ID,trace中所有span共享一个trace id。类似于一颗 span 树。
  5. annotation(标签),annotation用来记录事件的存在,其中,核心annotation用来定义请求的开始和结束。
  1. CS(Client Send客户端发起请求)。客户端发起请求描述了span开始。
  2. SR(Server Received服务端接到请求)。服务端获得请求并准备处理它。SR-CS=网络延迟。
  3. SS(Server Send服务器端处理完成,并将结果发送给客户端)。表示服务器完成请求处理,响应客户端时。SS-SR=服务器处理请求的时间。
  4. CR(Client Received 客户端接受服务端信息)。span结束的标识。客户端接收到服务器的响应。CR-CS=客户端发出请求到服务器响应的总时间。

 

数据结构是一颗树,从root span 开始

 

目的

监控多个微服务间接口调用情况,包括接口是否可用,请求耗时,请求时间等指标

 

条件

依赖 springcloud starter 组件

 

使用过程

sleuth

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

 

1.每个需要监控的系统引入依赖包

<!-- 引入sleuth依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

 

2.启动eureke-server, 服务端,客户端

3.请求一个接口,要求客户端要调用服务端,看日志结果

引入 slueth 之前

链路监控框架java springcloud链路监控原理_服务端_02

 

引入 slueth 之后,日志上多了[user-consumer,,,]

格式:[服务名称,traceId(一条请求调用链中 唯一ID),spanID(基本的工作单元,获取数据等),是否让zipkin收集和展示此信息]

 

链路监控框架java springcloud链路监控原理_服务端_03

 

zipkin

1.下载 zipkin 包

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

 

2.每个需要监控的系统引入依赖包

3.每个需要监听的服务,修改配置文件

spring:
  zipkin:
    base-url: http://localhost:9411/
  sleuth:
    sampler:
    #sleuth采样率,默认为10,值越大收集越及时,但性能影响也越大
      rate: 10

 

链路监控框架java springcloud链路监控原理_链路监控框架java_04

 

链路监控框架java springcloud链路监控原理_服务端_05