服务链路追踪

分布式系统服务追踪

Sleuth+Zipkin

简介

链路追踪组件有Google的Dapper,Twitter和Zipkin以及阿里的Eagleeye等

  • Span(跨度):基本工作单元,发送一个远程调度任务就会产生一个Span,Span是一个64位ID唯一的标识,Trace是用另一个64位ID唯一标识的,Span还有其他数据信息,比如摘要、时间戳时间、Span的ID、以及进度ID
  • Trace(跟踪)一系列Span组成的一个树状结构。请求一个微服务系统的API接口,这个API接口,需要调用多个微服务,调用每个微服务都会产生一个新的Span,所有由这个请求产生的Span组成了这个Trace
  • 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时间戳便可以得到整个请求所消耗的时间

使用

安装zipkin

1
2
3
4
5
# 数据存储到内存中
docker run -d -p 9411:9411 openzipkin/zipkin

# 数据存储到es
docker run --env STORAGE_TYPE=elasticsearch --env ES_HOSTS=192.168.0.12:9200 openzipkin/zipkin-dependencies

依赖

1
2
3
4
5
<!-- zipkin自动引入了sleuth -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
spring:
zipkin:
# zipkin服务器地址
base-url: http://127.0.0.1:9411/
# 关闭服务发现,否则SpringCloud会把zipkin的url当做服务名称
discoveryClientEnabled: false
sender:
# 设置使用htpp的方式传输数据
type: web
sleuth:
sampler:
# 设置抽样采集率为100%,默认是0.1,10%
probability: 1

相关文章

SpringCloud

服务注册与发现

服务调用

SpringCloud-OpenFeign问题

SpringCloud-GateWay工具类

DockerCompose常用软件配置

SpringQuartz动态定时任务

Redis集群搭建

redis分布式锁

K8S