Spring Cloud 之sleuth分布式链路跟踪

1.引入

如何串联调用链,快速定位问题
如何厘清微服务之间的依赖关系
如何进行各个服务接口的性能分折
如何跟踪业务流的处理顺序

2.sleuth介绍

spring Cloud Sleuth为 spring Cloud提供了分布式跟踪的解决方案,它大量借用了 Google Dapper、 Twitter Zipkin和 Apache HTrace的设计

3.名词解释

Span
Span是基本的工作单元。Span包括一个64位的唯一ID,一个64位trace码,描述信息,时间戳事件,key-value 注解(tags),span处理者的ID(通常为IP)。
最开始的初始Span称为根span,此span中span id和 trace id值相同。

Trance
包含一系列的span,它们组成了一个树型结构

Annotation
用于及时记录存在的事件。常用的Annotation如下

cs - Client Sent:客户端发送一个请求,表示span的开始
sr - Server Received:服务端接收请求并开始处理它。(sr-cs)等于网络的延迟
ss - Server Sent:服务端处理请求完成,开始返回结束给服务端。(ss-sr)表示服务端处理请求的时间
cr - Client Received:客户端完成接受返回结果,此时span结束。(cr-sr)表示客户端接收服务端数据的时间


这里写图片描述


4.Sleuth整合Zipkin实现分布式链路跟踪

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

Zipkin简介 Zipkin是 Twitter开源的分布式跟踪系统,基于 Dapper的论文设计而来。它的主要功能是 收集系统的时序数据,从而追踪微服务架构的系统延时等问题。 Zipkin还提供了一个非常 友好的界面,来帮助分析追踪数据。官网地址:http://zipkin.io


编写Zipkin Server

  <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-server</artifactId>
        </dependency>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-ui</artifactId>
     </dependency>

启动项目,访问地址:http://localhost:9411/zipkin/
这里写图片描述

这里写图片描述

简单讲解下图中各个查询条件的含义: 第一列表示Service Name,也就是各个微服务spring.application.name的值。第二列表 示Span的名称,all表示所有。Start time和End time,分别用于指定起始时间和截止时 间。Duration表示持续时间,即Span从创建到关闭所经历的时间。Limit表示查询几条数 据。类似于 MySQL数据库中的 limit关键词。Annotations Query,用于自定义查询条 件


微服务整合Zipkin

<dependency>
   <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency> 
spring:
  zipkin:
    base-url: http://127.0.0.1:9411
  sleuth:
    sampler:
      percentage: 1.0

spring.zipkin.base-url:指定Zipkin的地址。 spring.sleuth.sampler.percentage:指定需采样的请求的百分比,默认值是0.1,即 10%。这是因为在分布式系统中,数据量可能会非常大,因此采样非常重要。但是我们示 例数据少最好配置为1全采样


用Elasticsearch存储Zipkin的数据

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

        <!-- 持久化到ElasticSearch-->
        <!--<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>-->
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-storage-elasticsearch-
            http</artifactId>
            <version>1.29.2</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
        </dependency>

           <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-ui</artifactId>
        </dependency>
server:
    port: 9411
zipkin:
  storage:
    type: elasticsearch
    elasticsearch:
      cluster: elasticsearch
      hosts: http://localhost:9200
      index: zipkin
      index-shards: 5
      index-replicas: 1

启动项目,访问一次订单服务:http://localhost:8010/user/1
查看elasticsearch后端数据是否存储成功:http://localhost:9200/_search

猜你喜欢

转载自blog.csdn.net/qyj19920704/article/details/81230007