SpringCloud组件之服务链路追踪Sleuth(Hoxton版本)

1.Spring Cloud Sleuth简介

Add sleuth to the classpath of a Spring Boot application (see below for Maven and Gradle examples), and you will see the correlation data being collected in logs, as long as you are logging requests. —— 摘自官网

Spring Cloud Sleuth 是分布式系统中跟踪服务间调用的工具,它可以直观地展示出一次请求的调用过程,本文将对其用法进行详细介绍。并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可。并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可。

1.1服务追踪分析

微服务架构上通过业务来划分服务的,通过REST调用,对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败。随着业务的不断扩张,服务之间互相调用会越来越复杂。

随着服务的越来越多,对调用链的分析会越来越复杂。它们之间的调用关系也许如下:

1.2相关术语

  • Span:基本工作单元,例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标识,trace以另一个64位ID表示,span还有其他数据信息,比如摘要、时间戳事件、关键值注释(tags)、span的ID、以及进度ID(通常是IP地址) span在不断的启动和停止,同时记录了时间信息,当你创建了一个span,你必须在未来的某个时刻停止它。
  • Trace:一系列spans组成的一个树状结构,例如,如果你正在跑一个分布式大数据工程,你可能需要创建一个trace。
  • Annotation:用来及时记录一个事件的存在,一些核心annotations用来定义一个请求的开始和结束
    1. cs - Client Sent -客户端发起一个请求,这个annotion描述了这个span的开始
    2. sr - Server Received -服务端获得请求并准备开始处理它,如果将其sr减去cs时间戳便可得到网络延迟
    3. ss - Server Sent -注解表明请求处理的完成(当请求返回客户端),如果ss减去sr时间戳便可得到服务端需要的处理请求时间
    4. cr - Client Received -表明span的结束,客户端成功接收到服务端的回复,如果cr减去cs时间戳便可得到客户端从服务端获取回复的所有所需时间 将Span和Trace在一个系统中使用Zipkin注解的过程图形化: 将Span和Trace在一个系统中使用Zipkin注解的过程图形化:

2.构建演示工程

2.1环境准备

本文演示工程使用之前文章中的工程改造,包括spring-cloud-eureka-server,spring-cloud-eureka-client-provider,spring-cloud-feign-demo,先启动Eureka注册中心spring-cloud-eureka-server。

2.2改造工程集成zipkin

spring-cloud-eureka-client-provider,spring-cloud-feign-demo 两个工程中增加zipkin相关依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

修改application.yml文件,添加如下

spring:
  zipkin:
    base-url: http://localhost:9411
    #设置Sleuth的抽样收集概率
  sleuth:
    sampler:
      probability: 0.1

2.3整合Zipkin获取及分析日志

Zipkin是Twitter的一个开源项目,可以用来获取和分析Spring Cloud Sleuth 中产生的请求链路跟踪日志,它提供了Web界面来帮助我们直观地查看请求链路跟踪信息。 SpringBoot 2.0以上版本已经不需要自行搭建zipkin-server,我们可以从该地址下载zipkin-server:http://repo1.maven.org/maven2/io/zipkin/java/zipkin-server/2.9.4/zipkin-server-2.9.4-exec.jar 下载完成后,执行如下命令启动

java -jar zipkin-server-2.9.4-exec.jar

Zipkin页面访问地址:http://127.0.0.1:9411

启动spring-cloud-eureka-client-provider,spring-cloud-feign-demo两个工程,多次调用(Sleuth为抽样收集)接口http://localhost:9003/feign/test1?name=Trazen ,调用完后查看Zipkin首页发现已经有请求链路跟踪信息了。

点击查看详情可以直观地看到请求调用链路和通过每个服务的耗时:

点击依赖,可以发现服务的依赖关系

3.项目git地址

https://github.com/ty1972873004/spring-cloud-demo

4.参考文档

  • https://github.com/spring-cloud/spring-cloud-sleuth
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章