一、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。

【Spring Cloud】Spring Cloud之Spring Cloud Sleuth,分布式服务跟踪(1)的更多相关文章

  1. 第11章 分布式服务跟踪: Spring Cloud Sleuth

    通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果, 在复杂的微服务架构系统中, 几乎每一个前端请求都会形成一条复杂的分布式服务调用链路, 在每条链路中任何一个依 ...

  2. Spring Cloud第九篇 | 分布式服务跟踪Sleuth

    ​ ​本文是Spring Cloud专栏的第九篇文章,了解前八篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...

  3. 分布式服务跟踪及Spring Cloud的实现

    在分布式服务架构中,需要对分布式服务进行治理——在分布式服务协同向用户提供服务时,每个请求都被哪些服务处理?在遇到问题时,在调用哪个服务上发生了问题?在分析性能时,调用各个服务都花了多长时间?哪些调用 ...

  4. springcloud 分布式服务跟踪sleuth+zipkin

    原文:https://www.jianshu.com/p/6ef0b76b9c26 分布式服务跟踪需求 随着分布式服务越来越多,调用关系越来越复杂,组合接口越来越多,要进行分布式服务跟踪监控的需求也越 ...

  5. 【Spring Cloud】Spring Cloud之Zipkin server搭建以及RabbitMQ收集,分布式服务跟踪(3)

    一.搭建步骤 1)新建Spring Boot项目,引入pom坐标 <parent> <groupId>org.springframework.boot</groupId& ...

  6. 【Spring Cloud】Spring Cloud之Zipkin server搭建以及HTTP收集,分布式服务跟踪(2)

    一.搭建步骤 1)新建Spring Boot项目,引入pom坐标 <parent> <groupId>org.springframework.boot</groupId& ...

  7. 【Dubbo实战】 Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(转)

    Dubbo与Zookeeper.Spring整合使用 Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spri ...

  8. Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(转)

    Dubbo与Zookeeper.Spring整合使用 Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spri ...

  9. springcloud(十二):使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

    随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求变慢或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何快读定位 ...

随机推荐

  1. BootstrapTable的简单使用教程

    1.引入必须的几个包 <link th:href="bootstrap/css/bootstrap.css}"/> <link th:href="boo ...

  2. C语言博客作业2019-04--数组

    0.展示PTA总分(0----2) 展示3张关于"数组题目集"分数截图. 1.本章学习总结(2分) 1.1 学习内容总结 整理数组这章学习主要知识点,必须包含内容有: 数组中如何查 ...

  3. SQL2008R2下数据库修复一例

    某天访问某个数据库的时候,系统报错.连上去看了一下,服务器是SQL2008R2.由于有上次修复的经验,先使用DBCC查看数据库情况. DBCC的返回: XXXXXXXXXXX发生异常数据库 ID 7, ...

  4. 安装-apache skywalking (java 应用性能监控)

    官网:http://skywalking.apache.org/ 服务器:10.30.31.28 centos 7 jdk 1.8.x ES 5.x 5.0.0-bet a2版本 . http://s ...

  5. flink安装启动(docker)

    参考https://hub.docker.com/_/flink/ 相关端口The Web Client is on port 8081JobManager RPC port 6123TaskMana ...

  6. Maven私服配置Setting和Pom文件

    上一遍博客已经在linux服务器上,搭建好nexus私服了 现在就需要配置setting.xml和pom.xml来使nexus作为maven的私服.setting.xml文件在conf下面,pom.x ...

  7. 重置mysql root密码

    首先结束mysql进程,利用ps aux | grep mysql命令得到进程ID号,kill ID号,结束进程其次,运行mysqld --skip-grant-tables 或者mysqld_saf ...

  8. 使用ADB安装apk安装包

    1.手机通过USB线连接到电脑,并打开开发者选项和USB调试,允许本机进行调试. 2.打开cmd命令行输入:adb devices 查看当前连接的设备列表. 3.安装apk包命令: adb -s [d ...

  9. 第十二节:Asp.Net Core 之分布式缓存(SQLServer和Redis)

    一. 整体说明 1. 说明 分布式缓存通常是指在多个应用程序服务器的架构下,作为他们共享的外部服务共享缓存,常用的有SQLServer.Redis.NCache.     特别说明一下:这里的分布式是 ...

  10. C/C++ 的编译和链接

    C/C++文件 C/C++程序文件包括 .h .c .hpp .cpp,其中源文件(.c .cpp)是基本的编译单元,头文件(.h .hpp)不会被编译器编译. C/C++项目构建(build)过程, ...