一、Spring Cloud Sleuth组件的作用

  为微服务架构增加分布式服务跟踪的能力,对于每个请求,进行全链路调用的跟踪,可以帮助我们快速发现错误根源以及监控分析每条请求链路上的性能瓶颈等。

二、项目中如何引入Spring Cloud Sleuth组件
1)增加spring-cloud-starter-sleuth依赖

            <!-- sleuth-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<version>2.0..RELEASE</version>
</dependency>

2)增加相应的项目配置

# 知道服务名称
spring.application.name: service-order
# 指定leuth的抽样比例,1代表全部,该参数用于控制跟踪信息是否发送到第三方服务上入zipkin
sleuth.sampler.probability:

3)修改项目日志的打印格式,目的就是打印跟踪相关的信息,入traceid,spanid等等

console-pattern:控制台输出的日志格式
file-pattern: 文件输出的日志格式
console-pattern:  '%d{yyyy-MM-dd HH:mm:ss.SSS} [${spring.application.name:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}] %boldYellow([%thread]) %highlight(%-5level) %boldGreen(%logger{50}.%M\(%F:%L\)) - %msg%n'
file-pattern: '%d{yyyy-MM-dd HH:mm:ss.SSS} [${spring.application.name:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}] [%thread] %-5level %logger{50} - %msg%n'

4)controller方法增加日志输出并启动项目,用于查看日志打印的效果,比如

log.info("test sleuth log");

三、Sleuth相关概念介绍

1)Trace ID、SpanId等值介绍

运行项目并请求,你会看到这样的日志,如下:

-- ::15.585  INFO [service-order,313fe940c4574c66,313fe940c4574c66,true]  --- [io--exec-] c.zbq.order.controller.OrderController   : test sleuth log

其中红色标出的为跟踪日志:[service-order,313fe940c4574c66,313fe940c4574c66,true]

这些元素正是实现分布式服务跟踪的重要组成部分,每个值的含义如下所述。

  • 第一个值:service-order,它记录了应用的名称,也就是application.yml或bootstrap.yml中spring.application.name参数配置的属性。
  • 第二个值:f410ab57afd5c145,Spring Cloud Sleuth生成的一个ID,称为Trace ID,它用来标识一条请求链路。一条请求链路中包含一个Trace ID,多个Span ID。
  • 第三个值:a9f2118fa2019684,Spring Cloud Sleuth生成的另外一个ID,称为Span ID,它表示一个基本的工作单元,比如发送一个HTTP请求。
  • 第四个值:false,表示是否要将该信息输出到Zipkin等服务中来收集和展示。

上面四个值中的Trace ID和Span ID是Spring CloudSleuth实现分布式服务跟踪的核心。在一次服务请求链路的调用过程中,会保持并传递同一个Trace ID,从而将整个分布于不同微服务进程中的请求跟踪信息串联起来。若多个服务同属于一个前端服务请求来源,那么它们的Trace ID是相同的,处于同一条请求链路中。

·X-B3-TraceId:一条请求链路(Trace)的唯一标识,必需的值。·X-B3-SpanId:一个工作单元(Span)的唯一标识,必需的值。·X-B3-ParentSpanId:标识当前工作单元所属的上一个工作单元,Root Span(请求链路的第一个工作单元)的该值为空。·X-B3-Sampled:是否被抽样输出的标志,1表示需要被输出,0表示不需要被输出。·X-Span-Name:工作单元的名称。

2)sleuth日志信息的抽样收集

Sleuth中的抽样收集策略是通过Sampler接口实现的
默认情况下,Sleuth会使用ProbabilityBasedSampler实现的抽样策略,以请求百分比的方式配置和收集跟踪信息。我们可以通过在application.properties中配置下面的参数对其百分比值进行设置,它的默认值为0.1,代表收集10%的请求跟踪信息。比如我们配置中指定的:

sleuth.sampler.probability: 

在开发调试期间,通常会收集全部跟踪信息并输出到远程仓库,我们可以将其值设置为1。

最新文章

  1. 前端学HTTP之网络基础
  2. JAVA中保留小数的多种方法
  3. 验证码类库CaptchaMvc
  4. 让IE8在win7下面能显示使用window.showmodaldialog弹出窗口的地址状态栏
  5. Android登录等待效果
  6. ios 用户相册
  7. Android TextView换行问题
  8. 详解js中的寄生组合式继承
  9. 安装php 带debug
  10. 破解EXCEL2007的密码
  11. [计算机组成原理][实验十.R-I-J型指令CPU设计实验总结]
  12. Android + HTML5 混合开发
  13. java bio总结
  14. win10企业版2016长期服务版本激活
  15. 关于Newtonsoft.Json,反序列化jason,内容有key的转换
  16. 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-5 random direction &amp; ONB
  17. gitlab:开发+测试+发布的全流程图
  18. sim卡联系人name为空的问题。
  19. [Spring]IOC控制反转和DI依赖注入
  20. F# 图形数学基础。

热门文章

  1. Oracle_PLSQL导出导入dmp文件
  2. 小程序报错 “渲染层错误” Expect END descriptor with depth 0 but get another
  3. maven site 命令报错
  4. AKKA Inbox收件箱
  5. Java学习之旅(一):探索extends
  6. 在Windows 10中禁用自动文件夹类型发现
  7. 另一个角度的redis--redis 可以看做是c/s架构的软件
  8. 彻底搞懂Javascript的this
  9. arguments 使用
  10. 基于Dapper的开源LINQ扩展,且支持分库分表自动生成实体二