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

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://www.hqwc.cn/news/15210.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 686. 重复叠加字符串匹配(KMP算法-java)

重复叠加字符串匹配 leetcode 686. 重复叠加字符串匹配题目描述KMP 算法代码演示 KMP 算法 leetcode 686. 重复叠加字符串匹配 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/repeated-string-match 题目描述 给定两个字…

linux报错 /bin/bash^M:解释器错误:没有那个文件或目录

在Linux中运行脚本时&#xff0c;会出现linux报错 /bin/bash^M:解释器错误:没有那个文件或目录。这是因为我们将在Windows下编写的脚本拷贝到Linux环境中运行时会出现运行不了的情况。主要还是Windows的换行符为\r\n,而Linux环境中的换行符号为\n。 解决方法有&#xff1a;  …

【Docker 部署Minio】

Docker 部署Minio 一、拉取Minio镜像二、配置1、创建如下目录2、创建容器并运行 三、访问 一、拉取Minio镜像 访问Docker Hub镜像站找到自己需要的Minio镜像 运行以下命令 sudo docker pull minio/minio二、配置 1、创建如下目录 mkdir -p /home/zx/minio/config mkdir -p…

【计算机组成与体系结构课程设计】上机考试

1 (1) 针对图中的MIPS处理器数据通路(不考虑I/O)&#xff0c;用红色或蓝色描出执行sw指令时的数据通路。&#xff08;将该图下载到电脑&#xff0c;并用画图完成描线&#xff09; (2) 写出执行sw指令时&#xff0c;各个元件控制端信号应该置什么值? 2 基于Minisys处理…

合作、参与、让开源更易用 | 亚马逊的开源文化

JAX 是一种越来越流行的库&#xff0c;它支持原生 Python 或 NumPy 函数的可组合函数转换&#xff0c;可用于高性能数值计算和机器学习研究。JAX 提供了编写 NumPy 程序的能力&#xff0c;这些程序可以使用 GPU/TPU 自动差分和加速&#xff0c;从而形成了更灵活的框架来支持现代…

Stable Diffusion 使用 SadTalker 生成图片数字人

Heygen和D-ID等照片转视频的工具&#xff0c;都需要在线付费使用。本次介绍一个SadTalker数字人。SadTalker有多种使用方式&#xff0c;包括完整安装程序和stable diffusion插件模式。安装程序操作较繁琐&#xff0c;因此推荐stable diffusion插件模式。 文章目录 SadTalker安…

最小栈——力扣155

方法&#xff1a;辅助栈 这些函数中只有求最小值函数需要借助辅助栈 代码如下&#xff1a; class MinStack {stack<int> x_stack;stack<int> min_stack; public:MinStack() {min_stack.push(INT_MAX);}void push(int val) {x_stack.push(val);min_stack.push(…

Java的异常Exception

异常 1、异常概述与异常体系结构 1.1、异常概述 异常&#xff1a;在Java语言中&#xff0c;将程序执行中发生的不正常情况称为“异常”&#xff08;开发过程中的语法错误和逻辑错误不是异常&#xff09; Java程序在执行过程中所发生的异常事件可分为两类&#xff1a; Erro…

MachineLearningWu_7+8_LogisticRegression/Classification

x.1 logistic regression 对于诸如分辨细胞是恶性肿瘤细胞与否的类似分类问题&#xff0c;我们使用Linear Regression的模型并不合适&#xff0c;所以引入Logistic Regression的模型&#xff0c;并绘制decision boundary&#xff0c;如下&#xff0c; Classification的最后一层…

基于Java+Swing+Mysql实现图书管理系统V2.0

基于JavaSwingMysql实现图书管理系统V2.0 一、系统介绍二、功能展示1.项目内容2.项目骨架3.数据库表4.主界面5.添加6、修改7、查询8、删除 四、其它1.其他系统实现五.获取源码 一、系统介绍 本系统主要有对图书信息的增删改查操作功能。 项目类型&#xff1a;Java SE项目&…

多元分类预测 | Matlab 粒子群算法(PSO)优化xgboost的分类预测,多输入单输出模型。PSO-xgboost分类预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab 粒子群算法(PSO)优化xgboost的分类预测,多输入单输出模型。PSO-xgboost分类预测模型 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程…

软考高级之系统架构师系列之系统配置与性能评价、信息化基础

系统配置与性能评价 性能 计算机系统的性能一般包括两个大的方面&#xff1a; 可用性&#xff0c;也就是计算机系统能正常工作的时间&#xff0c;其指标可以是能够持续工作的时间长度&#xff0c;也可以是在一段时间内&#xff0c;能正常工作的时间所占的百分比处理能力&…