Spring cloud实践之道七(链路追踪Sleuth)

服务追踪

随着微服务数量逐渐增大,服务间的依赖关系越来越复杂,怎么分析它们之间的调用关系及相互的影响?Soring cloud提供了Sleuth组件来完成这个工作。下面的文章基本上是来自官网。

术语

Span: 基本工作单元,例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标识,trace以另一个64位ID表示,span还有其他数据信息,比如摘要、时间戳事件、关键值注释(tags)、span的ID、以及进度ID(通常是IP地址)
span在不断的启动和停止,同时记录了时间信息,当你创建了一个span,你必须在未来的某个时刻停止它。
Trace:一系列spans组成的一个树状结构,例如,如果你正在跑一个分布式大数据工程,你可能需要创建一个trace。
Annotation:用来及时记录一个事件的存在,一些核心annotations用来定义一个请求的开始和结束

  • cs - Client Sent -客户端发起一个请求,这个annotion描述了这个span的开始
  • sr - Server Received -服务端获得请求并准备开始处理它,如果将其sr减去cs时间戳便可得到网络延迟
  • ss - Server Sent -注解表明请求处理的完成(当请求返回客户端),如果ss减去sr时间戳便可得到服务端需要的处理请求时间
  • cr - Client Received -表明span的结束,客户端成功接收到服务端的回复,如果cr减去cs时间戳便可得到客户端从服务端获取回复的所有所需时间
系统示意图

Spring Cloud Sleuth

Spring Cloud Sleuth是对Zipkin的一个封装,对于Span、Trace等信息的生成、接入HTTP Request,以及向Zipkin Server发送采集信息等全部自动完成。
Spring应用在监测到Java依赖包中有sleuth和zipkin后,会自动在RestTemplate的调用过程中向HTTP请求注入追踪信息,并向Zipkin Server发送这些信息。

Sleuth项目

源码地址

  1. 增加pom.xml依赖
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-server</artifactId>
        </dependency>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-ui</artifactId>
        </dependency>
  1. zipkin服务器
@SpringBootApplication
@EnableZipkinServer
public class SleuthApplication {
    public static void main(String[] args) {
        new SpringApplicationBuilder(SleuthApplication.class).web(true).run(args);
    }
}
  1. 配置文件application.properties
spring.application.name=cloud-Sleuth-server
server.port=9411
  1. 启动服务
    在运行zipkin服务之后,就可以在浏览器看到如下的效果


    显示的效果

书写测试服务

我们书写2个服务,一个服务消费另一个服务。通过在pom.xml文件中增加依赖,可以让通过RestTemplate的调用链路自动添加到zipkin服务器上

  1. pom.xml中增加依赖
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-sleuth-zipkin</artifactId>
        </dependency>
  1. 修改配置文件,指定zipkin服务器
spring.zipkin.base-url=http://XXXX:9411
  1. 依次启动服务,执行调用,在zipkin server上进行查看
依赖示意图

推荐阅读更多精彩内容