Spring Boot 中的 Sleuth 是什么, 如何使用

article/2025/9/20 21:56:10

Spring Boot 是一个非常流行的 Java Web 开发框架,它提供了许多方便的功能,其中之一就是 Sleuth。Sleuth 是一个分布式跟踪系统,用于跟踪应用程序中的请求和操作。在本文中,我们将探讨 Spring Boot 中的 Sleuth 是什么,以及如何使用它来跟踪应用程序中的请求和操作。

在这里插入图片描述

什么是 Sleuth?

Sleuth 是一个分布式跟踪系统,用于跟踪应用程序中的请求和操作。它可以帮助我们了解应用程序的结构和性能,并定位问题的根本原因。Sleuth 可以与 Zipkin 等分布式跟踪系统配合使用,从而提供更全面的应用程序跟踪和分析功能。

Sleuth 在 Spring Boot 中提供了一个便捷的集成方式。它可以轻松地跟踪应用程序中的请求和操作,并将跟踪信息记录到日志文件中。这使得我们可以更轻松地了解应用程序的结构和性能,并快速定位问题的根本原因。

Sleuth 的核心概念

在使用 Sleuth 之前,我们需要了解一些核心概念:

  • Trace(跟踪):一个 Trace 表示一个请求或操作的完整的调用链,从客户端发起请求开始,到服务端响应请求结束。
  • Span(跨度):一个 Span 表示一个请求或操作的一部分,它包含了一些有用的信息,如开始时间、结束时间、操作名称等。
  • Trace ID(跟踪 ID):一个 Trace ID 是一个唯一的标识符,它用于将一组 Span 关联在一起,形成一个完整的 Trace。
  • Span ID(跨度 ID):一个 Span ID 是一个唯一的标识符,它用于标识一个 Span。

在 Sleuth 中,每个请求或操作都会生成一个 Trace,并且每个 Trace 包含多个 Span。每个 Span 包含一个唯一的 Span ID,并与一个 Trace ID 相关联。通过 Trace ID 和 Span ID,我们可以将多个 Span 关联在一起,形成一个完整的 Trace。

使用 Sleuth

要使用 Sleuth,我们需要将 Sleuth 依赖添加到项目中。在 Maven 项目中,可以在 pom.xml 文件中添加以下依赖:

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

在 Gradle 项目中,可以在 build.gradle 文件中添加以下依赖:

implementation 'org.springframework.cloud:spring-cloud-starter-sleuth'

添加依赖后,Sleuth 就会自动启用,并开始跟踪应用程序中的请求和操作。Sleuth 会自动为每个请求或操作生成一个 Trace,并为每个 Trace 中的每个 Span 生成一个唯一的 Span ID。

默认情况下,Sleuth 会将 Trace ID 和 Span ID 添加到日志中,以便我们可以轻松地跟踪应用程序中的请求和操作。例如,下面是一个包含 Trace ID 和 Span ID 的日志:

2021-09-01 12:00:00.000 [my-service,0123456789abcdef,0123456789abcdef,true] TRACE [MyController] - Handling request

在上面的例子中,日志中包含了一个 Trace ID(0123456789abcdef)和一个 Span ID(0123456789abcdef),它们分别与一个名为 my-service 的服务相关联。

自定义 Sleuth 配置

在使用 Sleuth 时,我们可以通过配置文件或编程方式进行自定义配置。以下是一些常用的自定义配置方式:

配置 Trace 和 Span 的名称

默认情况下,Sleuth 会为每个 Trace 和Span 分别使用应用程序的名称和随机生成的 ID。如果需要自定义 Trace 和 Span 的名称,可以在 application.properties(或 application.yaml)文件中添加以下配置:

spring.sleuth.sampler.probability=1.0
spring.application.name=my-custom-app-name
spring.sleuth.span-name-regex=(?<controller>MyController)

上面的配置将会将 Trace 的名称设置为 my-custom-app-name,将所有包含 MyController 的 Span 设置为 MyController。同时,spring.sleuth.sampler.probability=1.0 确保 Sleuth 对所有请求和操作进行跟踪。

配置 Sleuth 的 Sampler

在实际的生产环境中,我们可能需要对请求和操作进行采样,以避免 Sleuth 产生过多的跟踪数据。在 Sleuth 中,采样是通过 Sampler 实现的。默认情况下,Sleuth 使用一个随机采样器,它对 10% 的请求进行采样。

如果需要自定义采样器,可以在配置文件中添加以下配置:

spring.sleuth.sampler.type=RATE_LIMITED
spring.sleuth.sampler.rate=0.5

上面的配置将会将采样器设置为 RATE_LIMITED,它会根据请求速率限制采样率。具体而言,它将对 50% 的请求进行采样。

使用 MDC(Mapped Diagnostic Context)

在实际的生产环境中,我们可能需要将 Trace 和 Span 的信息传递给 Logback 或 Log4j2 等日志框架。为了实现这一点,Sleuth 提供了一个 MDC(Mapped Diagnostic Context)实现,它可以将 Trace 和 Span 的信息添加到日志中。

要使用 MDC,我们需要在 application.properties(或 application.yaml)文件中添加以下配置:

logging.pattern.level=%X{traceId} %X{spanId} %5p [${spring.zipkin.service.name:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}] [%t] %logger{5} - %msg%n

上面的配置将在日志模式中添加 Trace 和 Span 的信息。这样,我们就可以轻松地跟踪应用程序中的请求和操作,并将跟踪信息添加到日志中。

总结

本文介绍了 Spring Boot 中的 Sleuth,它是一个分布式跟踪系统,用于跟踪应用程序中的请求和操作。我们了解了 Sleuth 的核心概念,包括 Trace、Span、Trace ID 和 Span ID,并探讨了如何使用 Sleuth。

在实际的生产环境中,我们可以通过自定义配置来使用 Sleuth。例如,我们可以配置 Trace 和 Span 的名称、采样器类型和速率,以及使用 MDC 将 Trace 和 Span 的信息添加到日志中。这些功能可以帮助我们更轻松地了解应用程序的结构和性能,并快速定位问题的根本原因。


http://chatgpt.dhexx.cn/article/GhOsSdKu.shtml

相关文章

sleuth原理分析

背景 微服务模式下&#xff0c;一次请求可能会经过多个服务。如果没有日志链将单次请求的日志串起来&#xff0c;定位问题时很容易陷入海量的日志中&#xff0c;无法快速定位问题。 sleuth是spring cloud中日志链&#xff08;调用链解决方案&#xff09;&#xff0c;引入该依赖…

快速学习-Sleuth--链路追踪

Sleuth–链路追踪 6.1 链路追踪介绍 在大型系统的微服务化构建中&#xff0c;一个系统被拆分成了许多模块。这些模块负责不同的功能&#xff0c;组合成 系统&#xff0c;最终可以提供丰富的功能。在这种架构中&#xff0c;一次请求往往需要涉及到多个服务。互联网应用构建 在…

SpringCloud学习笔记(十二)Sleuth 分布式请求链路跟踪

目录 一、Sleuth介绍 1、为什么会出现这个技术&#xff1f;需要解决哪些问题&#xff1f; 2、是什么 二、搭建链路监控步骤 1、zipkin搭建安装 1&#xff09;下载 2&#xff09;运行jar 3&#xff09;运行控制台 4&#xff09;术语 2、服务提供者 cloud-provider-pa…

MySQL5种索引类型

一、简介 MySQL目前主要有以下几种索引类型&#xff1a; 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 二、语句 CREATE TABLE table_name[col_name data type] [unique|fulltext][index|key][index_name](col_name[length])[asc|desc] 1.unique|fulltext为可选…

mysql索引类型和索引方式

1.什么是索引 在MySQL中&#xff0c;索引&#xff08;index&#xff09;也叫做“键&#xff08;key&#xff09;”&#xff0c;它是存储引擎用于快速找到记录的一种数据结构。 2.索引的分类 在MySQL中&#xff0c;通常我们所指的索引类型&#xff0c;有以下几种&#xff1a;…

Mysql索引的类型(单列索引、组合索引 btree索引 聚簇索引等)

一、索引的类型 Mysql目前主要有以下几种索引类型&#xff1a;FULLTEXT&#xff0c;HASH&#xff0c;BTREE&#xff0c;RTREE。 FULLTEXT 即为全文索引&#xff0c;目前只有MyISAM引擎支持。其可以在CREATE TABLE &#xff0c;ALTER TABLE &#xff0c;CREATE INDEX 使用&…

mysql索引类型有哪些?

在Mysql数据库当中&#xff0c;我们经常会谈到Sql语句&#xff0c;当然也会谈到索引优化&#xff0c;那么在数据库当中有哪些索引类型呢&#xff0c;博主在这里进行分享&#xff0c;希望对大家能有所帮助。 目录 1、B-Tree索引&#xff1a; 2、Hash索引&#xff1a; 3、Full…

什么是索引?Mysql目前主要的几种索引类型

一、索引 MySQL索引的建立对于MySQL的高效运行是很重要的&#xff0c;索引可以大大提高MySQL的检索速度。 打个比方&#xff0c;如果合理的设计且使用索引的MySQL是一辆兰博基尼的话&#xff0c;那么没有设计和使用索引的MySQL就是一个人力三轮车。 索引分单列索引和组合索引。…

Mysql索引类型与索引方法

写在前面&#xff1a; 乍一看这两个概念可能有点混&#xff0c;先上一张发图。 索引类型就是我们平常说的唯一索引&#xff0c;主键索引&#xff0c;组合索引等索引类型。 我们都知道索引是一种数据结构&#xff0c;到底我们建的索引应该以什么样的结构存储呢&#xff1f;存储…

MYSQL 索引类型

一、索引类型 在数据库表中&#xff0c;对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表 代码如下: CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录&#xff0c;其中有一条&#xff1a;555…

常见索引类型

日常开发工作中&#xff0c;涉及到的数据存储&#xff0c;要做查询优化或想深入了解存储引擎&#xff0c;需要对索引知识有个起码的了解&#xff0c;下面介绍下最常见的四种索引结构。 位图索引哈希索引BTREE索引倒排索引 1、位图索引&#xff08;BitMap&#xff09; 位图索引…

数据库的五种索引类型

本文从如何建立mysql索引以及介绍mysql的索引类型,再讲mysql索引的利与弊,以及建立索引时需要注意的地方 首先:先假设有一张表,表的数据有10W条数据,其中有一条数据是nicknamecss,如果要拿这条数据的话需要些的sql是 SELECT * FROM award WHERE nickname css 一般情况下,在没…

mysql索引有哪些类型?

MySQL目前主要有的索引类型为&#xff1a;普通索引、唯一索引、主键索引、组合索引、全文索引。 通过给字段添加索引可以提高数据的读取速度&#xff0c;提高项目的并发能力和抗压能力。索引优化时mysql中的一种优化方式。索引的作用相当于图书的目录&#xff0c;可以根据目录…

你知道多少种索引?

前言 嗨&#xff0c;大家好&#xff0c;我是fancy呀。 在工作中我们常常用到索引&#xff0c;无论是普通索引还是唯一索引&#xff0c;都是一些常用的索引方式&#xff0c;目的就是为了提高查询效率&#xff0c;避免业务请求超时等问题。那么&#xff0c;当你在使用索引的时候…

动态规划算法 | 最长递增子序列

通过查阅相关资料发现动态规划问题一般就是求解最值问题。这种方法在解决一些问题时应用比较多&#xff0c;比如求最长递增子序列等。 有部分人认为动态规划的核心就是&#xff1a;穷举。因为要求最值&#xff0c;肯定要把所有可行的答案穷举出来&#xff0c;然后在其中找最值…

求最长递增子序列个数——C++

声明&#xff1a;本文原题主要来自力扣&#xff0c;记录此博客主要是为自己学习总结&#xff0c;不做任何商业等活动&#xff01; 一、下面是原题描述 给定一个未排序的整数数组&#xff0c;找到最长递增子序列的个数。 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递…

最长递增子序列(LIS)

最长递增子序列&#xff08;LIS&#xff09; 问题描述&#xff1a; 求一个序列的最长递增子序列&#xff0c;这样的子序列是允许中间越过一些字符的&#xff0c;即留“空”。 例如&#xff1a;4 2 3 1 5 的最长递增子序列为 2 3 5&#xff0c;长度为 3 。 解法&#xff1a;…

【Leetcode】最长递增子序列问题及应用

文章目录 最长递增子序列问题及应用300. 最长递增子序列面试题 17.08. 马戏团人塔354. 俄罗斯套娃信封问题面试题 08.13. 堆箱子1691. 堆叠长方体的最大高度406. 根据身高重建队列 最长递增子序列问题及应用 300. 最长递增子序列 请参考 【Leetcode】计算最长系列&#xff08…

输出最长递增子序列

目录 题目&#xff1a; 输入描述: 输出描述: 示例1 输入 输出 示例2 输入 输出 说明 备注: 思路分析&#xff1a; 改进&#xff1a; 得到最长子序列&#xff1a; 易错点&#xff1a; 代码展示&#xff1a; 题目&#xff1a; 给定数组arr&#xff0c;设长度为n&…

NC91 最长递增子序列

NC91 最长递增子序列 这道题n的范围是1e5&#xff0c;因此不能使用常规的dp[i]&#xff0c;表示以i结尾的最大的子序列&#xff0c;因为这个时间复杂度是n方级别。因此要换一种算法。 贪心二分&#xff0c;时间复杂度为O(nlogn) 下面说说贪心二分的解法&#xff0c;举例说明基…