通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果, 在复杂的微服务架构系统中, 几乎每一个前端请求都会形成一条复杂的分布式服务调用链路, 在每条链路中任何一个依赖服务出现延迟过高或错误的时候都有可能引起请求最后的失败。这时候,对于每个请求, 全链路调用的跟踪就变得越来越重要, 通过实现对请求调用的跟踪可以帮助我们快速发现错误根源以及监控分析每条请求链路上的性能瓶颈等。Spring Cloud Sleuth 提供了 一套完整的解决的分布式服务跟踪问题的方案

pom.xml 中增加下面的依赖

<parent>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-parent</artifactid>
  <version>l.3.7.RELEASE</version>
  <relativePath/>
</parent>
<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupid>org.springframework.cloud</groupid>
  <artifactid>spring-cloud-starter-eureka</artifactid>
</dependency>
<dependency>
  <groupid>org.springframework.cloud</groupid>
  <artifactid>spring-cloud-starter-ribbon</artifactid>
</dependency>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupid>org.springframework.cloud</groupid>
      <artifactid>spring-cloud-dependencies</artifactid>
      <version>Brixton.SRS</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

在application.properties 中,将 eureka.client.serviceUrl.defaultZone参数指向 eureka-server 的地址

spring.application.name=trace-1
server.port=9101
eureka.client.serviceUrl.defaultZone=http://localhost:llll/eureka/

跟踪原理

  • 为了实现请求跟踪, 当请求发送到分布式系统的入口端点时, 只需要服务跟踪框架为该请求创建一个唯一的跟踪标识, 同时在分布式系统内部流转的时候,框架始终保待传递 该唯一标识, 直到返回给请求方为止, 这个唯一标识就是前文中提到的Trace ID。 通过TraceID的记录, 我们就能将所有请求过程的日志关联起来
  • 为了统计各处理单元的时间延迟, 当请求到达各个服务组件时, 或是处理逻辑到达某个状态时, 也通过一个唯一标识来标记它的开始、 具体过程以及结束, 该标识就是前文中提到的SpanID。 对于每个Span来说, 它必须有开始和结束 两个节点, 通过记录开始 Span和结束Span的时间戳,就能统计出该Span的时间延迟,除了时间戳记录之外, 它还可以包含一些其他元数据, 比如事件名称、 请求信息等

最新文章

  1. 使用hexo,如果换了电脑怎么更新博客?
  2. js操作document文档元素 节点交换交换
  3. 揭开智能配置上网(微信Airkiss)的神秘面纱
  4. MyEclipse2015 编写js报 &#39;Calculating completion proposals..&#39; has encountered a problem.
  5. java 服务端解决ajax跨域问题
  6. node.js基础:数据存储
  7. 1.cocos2dx它Menu(CCMenuItemFont,CCMenuItemImage,CCMenuItemLabel,CCMenuItemSprite,CCMenuItemToggle)
  8. ClassLoader的类结构分析
  9. Freemodbus 1.5
  10. python初学之缓存清理:完全相同的代码与环境但是其中一个文件可以执行成功,一个执行不成功
  11. FileUrl
  12. Why I don&#39;t want use JPA anymore
  13. 3D Slicer Programmatically Set Slice Offset and Intersections 用代码修改Slicer中的切片偏移和交叉点显示
  14. SVN冲突以及解决办法
  15. ubuntu预装的是vim tiny版本
  16. update-alternatives关键解疑
  17. HDU 1535 Invitation Cards(逆向思维+邻接表+优先队列的Dijkstra算法)
  18. Java 操纵XML之修改XML文件
  19. 6.查找单链表中的倒数第k个结点
  20. iOS UI-创建空项目

热门文章

  1. Linux 用C语言实现简单的shell(2)
  2. JSP、Java和Servlet获取当前工程的路径
  3. BZOJ1407 NOI2002 Savage 【Exgcd】
  4. 论坛源码推荐(11.6):iPhone6/6 plus屏幕适配Demo,Java代码转Objective-C
  5. MySQL排序_20160926
  6. 《selenium2 python 自动化测试实战》(18)——自动化测试模型(一)
  7. python redis的基本使用
  8. 【BZOJ4025】二分图 LCT
  9. visibility:hidden和display:none的区别
  10. php mysql 字符集(三) (转)