Spring Cloud Sleuth分布式链路跟踪 相关图形

一 业务:多个微服务

        对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题。

二 需求:监控微服务

  1. 如何串联整个调用链路,快速定位问题?定位问题,不再使用查看日志的方式。
  2. 如何理清各个微服务之间的依赖关系?
  3. 如何进行各个微服务接口的性能分折?执行时间。
  4. 如何跟踪整个业务流程的调用处理顺序?

三 解决方案:

1 功能“集”:分布式链路跟踪     
2 “神”工具

  1. Spring Boot Actuator + 端点
  2. Spring Boot Admin + 可视化UI界面
  3. Hystrix Dashboard监控Hystrix服务
  4. Hystrix Turbine聚合多个Hystrix服务的监控信息
  5. Spring Cloud Sleuth + Zipkin Server分布式链路跟踪

四完成学习:

1 思想

        Spring Cloud Sleuth大量借用了,帮我们解决像上面提到的问题

  1. Google Dapper

  2. Twitter Zipkin,UI界面数据展示

  3.  Apache HTrace

2 组织、流原

  1. Spring Cloud Sleuth,分布式链路跟踪,埋点,生成跟踪数据 》上传 》 Zipkin Server,UI界面数据展示
    1. 第一步:需要监控和管理的微服务,都必须和zipkin整合
    2. 第二步:微服务,跟踪数据,上传zipkin server
    3. 第三步:在zipkin server ui上分析数据、查找问题所在的微服务、分析各个微服务的性能
  2. 这里面涉及到Spring Cloud Sleuth的一些术语: 
    1. request:请求
    2. response:响应
    3. span(跨度):基本工作单元,即工作流程中的一小段工作区间
      1. 请求是一个跨度
      2. 响应是一个跨度
      3. 服务是一个跨度
      4. 服务和服务之间的网络通信是一个跨度
        1. No Span Id:没有跨度id
        2. Span Id一直在变
    4. trace(跟踪):一组共享"rootspan"的 span组成的树状结构称为 traceo trace也用一个64位的 ID唯一标识, trace中的所有 span都共享该 trace的 ID;
      1. No Trace Id:没有跟踪id。
      2. Trace Id,全局的唯一,在整个链路中没有改变过。
    5. annotation(标注): annotation用来记录事件的存在,其中,核心annotation用来定义请求的开始和结束。
    6. CS(Client sent客户端发送):客户端发起一个请求,该annotation描述了span的开始;
    7. SR(server Received服务器端接收):服务器端获得请求并准备处理它。如果用 SR减去 CS时间戳,就能得到网络延迟;
    8. SS(server sent服务器端发送):该annotation表明完成请求处理(当响应发回客户端时)。如果用 SS减去 SR时间戳,就能得到服务器端处理请求所需的时间;
    9. CR(Client Received客户端接收): span结束的标识。客户端成功接收到服务器端的响应。如果 CR减去 CS时间戳,就能得到从客户端发送请求到服务器响应的所需的时间;

3 实现技术

  1. Google Dapper

  2. Twitter Zipkin,UI界面数据展示

  3.  Apache HTrace

4 工具

  1. Spring Cloud Sleuth,埋点,生成跟踪数据 》上传 》 Zipkin Server,UI界面数据展示        

5 具体1:Spring Cloud Sleuth可以追踪10种类型的组件

  1. async
  2. Hystrix
  3. messaging
  4. websocket
  5. rxjava
  6. scheduling
  7. web(Spring MVC Controller,Servlet)
  8. webclient(Spring RestTemplate)
  9. Feign
  10. Zuul;

6 具体2:认识Zipkin

  1. APM(应用性能监控与管理)工具
    1. Zipkin,Twitter开源,分布式实时数据跟踪系统,Distributed Tracking System。
    2. 基于Google Dapper,论文,实现链路追踪,标杆和理论基础。

    3. 官网,OpenZipkin · A distributed tracing system 

      1. 第一步:收集系统的时序数据

      2. 第二步:UI界面

      3. 第三步:分析追踪数据

      4. 第四步:延时、异常等待问题

  2. 韩国、Naver、Pinpoint。Apache、HTrace。阿里、EagleEye。京东、Hydra等

7 具体3:搭建Zipkin Server

  1. 创建一个SpringBoot项目,用于搭建Zipkin Server服务端;
  2. 添加依赖:自动引入springmvc,web项目,不使用内嵌的tomcat,使用的是jboss旗下的undertown内嵌服务器:
    <!-- zipkin-autoconfigure-ui -->
    <dependency>
        <groupId>io.zipkin.java</groupId>
        <artifactId>zipkin-autoconfigure-ui</artifactId>
        <version>2.12.3</version>
    </dependency>
    
    <!-- zipkin-server -->
    <dependency>
        <groupId>io.zipkin.java</groupId>
        <artifactId>zipkin-server</artifactId>
        <version>2.12.3</version>
    </dependency>

    注意:这个里面有版本的兼容性问题,当前我们的spring cloud G SR3版本使用2.12.3便可以正常使用,如果使用zipkin-server最新的版本,可能会启动失败;

  3. 配置文件:application.properties

    #内嵌的服务器undertown的端口
    server.port=9410
    
    #zipkin启动报错无法访问的解决方法
    management.metrics.web.server.autoTimeRequests=false
  4. 在启动类上加入注解:@EnableZipkinServer

    @EnableZipkinServer  //开启zipkin server的支持
    @SpringBootApplication
    public class SleuthApplication {
        public static void main(String[] args) {
            SpringApplication.run(SleuthApplication.class);
        }
    }

  5. 然后启动zipkin server服务,访问http://localhost:9410 (默认启动了Undertow服务的9410端口)

    为什么会有这个页面?

    1. 项目中没有加页面呀???为什么?

    2. 页面在jar包里面,一般名称是Xxx-UI.jar,同swagger的swagger-ui.jar

  6. 能看到上面这个页面,zipkin server服务搭建OK;

8、具体4:zipkin页面详解

(1)zipkin首页

         目前我们还查询不到数据,我们需要把微服务和sleuth整合,并把sleuth记录的数据上传到zipkin server,此时我们才能在页面上看到数据。

1)服务查询条件:

  1. 服务名:就是微服务配置文件中的application name;

  2. Span名称:跨度;

  3. 时间段 :现在查询的时间段;例如,查今天的所有数据。

  4. 根据Annotation查询:根据标注查询,用于自定义查询条件;例如,自定义一个参数去查。

  5. 持续时间:一次调用链的持续时间;例如,查运行时间大于5秒的服务调用。

  6. 数量:一页数量;

  7. 排序:排序规则;

2)服务查询结果:

 3)点击,查看服务地址。点击,查看服务调用参数详情:

(2)依赖

  

(3)根据Trace id进行搜索 

(4)可选的另外一套UI界面,功能一样,丑,英文,不好用,不建议用

9、内存:Spring Cloud Sleuth,埋点,生成跟踪数据 》上传 》 Zipkin Server,UI界面数据展示  》数据在内存中

  1. 第一步:微服务中使用spring cloud sleuth埋点,把生成的数据上传到zipkin server上
    1. 添加依赖,哪个服务需要监控和管理就加在哪个微服务上,provider和consumer都可以

      <!-- sleuth埋点,不需要加版本号,父项目spring cloud中已经定义好了 -->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-sleuth</artifactId>
      </dependency>
      
      <!-- 需要监控和管理的微服务,必须整合zipkin,数据就可以传到zipkin server上,不需要加版本号,父项目spring cloud中已经定义好了-->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-zipkin</artifactId>
      </dependency>
    2. 配置文件:application.properties

      #指定Zipkin server地址,接收spring cloud sleuth各个埋点生成的链路跟踪数据
      spring.zipkin.base-url=http://localhost:9410
      #发送跟踪数据到zipkin的类型web(http)
      spring.zipkin.sender.type=web
      #request采样的数量 默认是0.1 也即是10%,即采样10%的请求数据;
      #因为在分布式系统中,数据量可能会非常大,因此采样非常重要我们示例数据少最好配置为1全采样,100%的采集会稍微影响一点性能
      #例如一天的请求数据为200万,采样10%,即20万的数据量
      spring.sleuth.sampler.probability=1.0
  2. 第二步:启动需要监控和管理的微服务

    1. 要连数据库,得启动mysql

    2. 要连注册中心,得启动eureka

    3. 要连配置中心获取配置,得启动配置中心项目spring cloud config

      1. 使用spring cloud bus进行全局配置刷新

        1. 使用rabbitmq消息总线,得启动rabbitmq

  3. 第三步:调用微服务

    1. 最简单,使用浏览器,因为微服务都是基于http + Restful的controller

  4. 第四步:重新登录到zipkin server的首页,可看到数据

10、zipkin数据的持久化:Spring Cloud Sleuth,埋点,生成跟踪数据 》上传 》 Zipkin Server,UI界面数据展示  》Elastic Search数据持久化到硬盘(避免重启zipkin server或者宕机,数据不会丢失)

(1)业务、需求:zipkin数据的持久化 

(2)功能:zipkin数据的持久化

(3)工具:Elastic Search(推荐)、mysql、ElK

(4)完成学习:Elastic Search

   1)思想、组织

  1. Elastic Search是一个分布式可扩展的实时搜索和分析引擎

    1. 分布式实时搜索框架

  2. 大数据领域中使用的一个组件。

  3. 我们暂时不想象那么复杂,我们可以把它当作一个数据库来对待,就是用来存储数据的;

   2)实现技术

  1. Elastic Search底层
    1. Apache Lucene
    2. http + restful的请求方式,证明,可以直接使用http请求访问它并且得到json数据

   3)具体:Elastic Search相关信息

        GitHub:GitHub - elastic/elasticsearch: Free and Open, Distributed, RESTful Search Engine

        中文下载:Download Elasticsearch | Elastic 

        有windows版本(学习)和linux版本(工作)

   4)具体:Elastic Search解压(目录结构)、安装、启动、访问

        解压下载后的压缩包即完成安装,切换到bin目录,使用双击elasticsearch.bat脚本启动;

  启动后访问:http://localhost:9201,如果能返回json信息则表示安装启动OK;

 

(5)只官配play:zipkin +  Elastic Search,链路跟踪数据持久化

  1. 第一步:搭建好Elastic Search环境
  2. 第二步:zipkin server项目中,添加依赖
    <dependency>
        <groupId>io.zipkin.java</groupId>
        <artifactId>zipkin-autoconfigure-storage-elasticsearch-http</artifactId>
        <version>2.8.4</version>
    </dependency>
  3. 第三步:zipkin server项目中,application配置文件,添加配置
    #问题:idea不识别,没有提示,显黄色,不影响,可运行
    #原因:ES开发的spring boot Xxx.starter,没有写mater文件
    
    #类型:固定elasticsearch
    zipkin.storage.type=elasticsearch
    #名字:对应访问它,返回的json,cluster_name属性的值
    zipkin.storage.elasticsearch.cluster=elasticsearch
    #ES的ip和端口
    zipkin.storage.elasticsearch.hosts=http://localhost:9201
    #索引名称,自定义
    zipkin.storage.elasticsearch.index=zipkin
  4. 至此 zipkin server上的跟踪数据便存储在了Elasticsearch中,当zipkin server 重启或宕机,历史数据依然不会丢失;

五 后续内容

spring cloud stream

spring cloud getaway

spring cloud sso(单点登录)

spring cloud nacos

spring cloud 综合案例(安全,服务调服务的安全机制)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Cloud Sleuth是一个分布式跟踪解决方案,它可以帮助开发人员在微服务架构中追踪请求的流程和调用链。它通过为每个请求生成唯一的跟踪ID和跨服务的调用ID来实现这一目标。这些ID可以用于跟踪请求的流程和调用链,从而帮助开发人员快速诊断和解决问题。Spring Cloud Sleuth还提供了一些可视化工具,如Zipkin,可以帮助开发人员更好地理解和分析跟踪数据。 ### 回答2: SpringCloud Sleuth是一个基于日志的分布式跟踪方案,它可以用于解决微服务架构下的分布式系统的链追踪问题。在分布式系统中,一个请求经常会穿越多个服务,从而会形成一条复杂的链,如果有一台或多台机器对此进行记录,那么将能够轻松地查看和理解一个请求的完整径。这些信息能够帮助我们更快地定位问题所在,提高系统可靠性和稳定性。 Sleuth使用了Zipkin的架构和数据模型,通过在每个请求的Header中添加Trace Id和Span Id来实现链追踪。Trace Id表示整个请求链,Span Id表示每一个服务的一个简单步骤。使用这两个 Id,我们就可以将整个链追踪下来,使得对请求的监测、记录和分析变得更加容易。 Sleuth结合了Spring Cloud日志管理和Zipkin的功能,能够自动收集各个微服务的请求跟踪信息,并将其发送到Zipkin服务器进行聚合分析,视图展现。通过Sleuth的ChainInvoker,可以实现对所有链的统一管理。当一条请求跨越多个服务时,Sleuth会为每个服务实例生成唯一的spanId,并将这个spanId沿用到下一个服务实例,从而使得整条链保留了完整的信息。此外,Sleuth还支持基于日志的采样策略和数据比较高效的存储,保证了高性能的分布式追踪。 Sleuth的主要应用场景是微服务架构下的链跟踪和性能监控。微服务架构中有大量的服务,服务之间的关系错综复杂,因此链追踪对于排查问题、优化性能非常重要。Sleuth能够方便地实现链追踪和监测,并帮助我们快速定位问题所在,提高系统的可靠性和稳定性。 ### 回答3: Spring Cloud Sleuth追踪是 Spring Cloud 微服务架构中的一项重要的功能模块。通过 Sleuth追踪,我们可以跟踪整个分布式系统中的请求链,从而了解每个操作所花费的时间、调用的服务以及调用顺序。在微服务架构中,服务调用会涉及到多个服务之间的协作,使用 Sleuth追踪可以帮助我们很好地理解系统在内部的调用过程。 Sleuth追踪的原理是在每个服务的请求中添加唯一的追踪 ID,通过这个追踪 ID,Sleuth 可以实现将每个请求相关的服务调用串联起来,形成完整的请求链。追踪 ID 通常被称为 Trace ID,它作为请求的一部分,从前端发起请求的服务开始一直传递到最后一个服务。 通过 Sleuth追踪,我们可以了解每个调用的服务名和 IP 地址,以及请求的耗时情况,在调试分布式系统时非常实用。此外,Sleuth 还支持将链追踪信息集成到日志系统中,从而更好地协助开发人员进行故障排查。 Sleuth追踪还提供了 Zipkin 集成,Zipkin 是一个开源的分布式追踪系统,可以将链数据可视化显示,并提供了一些分析工具,帮助开发人员更好地理解系统的调用情况。 总之,Spring Cloud Sleuth追踪是一个非常实用的工具,可以帮助我们更好地理解分布式系统中服务调用的情况,有效地解决微服务架构中的复杂度和故障排查的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值