如何在 Spring Boot 中进行分布式追踪

news2024/11/19 10:35:21

在 Spring Boot 中进行分布式追踪

分布式系统中的应用程序由多个微服务组成,它们可以位于不同的服务器、容器或云中。当出现问题时,如性能瓶颈、错误或延迟,了解问题的根本原因变得至关重要。分布式追踪是一种用于跟踪和分析分布式应用程序性能和行为的工具。本文将介绍如何在Spring Boot应用程序中进行分布式追踪,以及如何使用Spring Cloud Sleuth和Zipkin来实现这一目标。

在这里插入图片描述

什么是分布式追踪?

分布式追踪是一种监视分布式系统的方法,通过追踪和分析请求在不同服务之间的传递路径和时间来帮助诊断性能问题。分布式追踪通常包括以下主要组件:

  • 跟踪器(Tracer):用于在请求进入和离开应用程序时创建唯一的跟踪标识符,并记录事件和时间戳。

  • 跟踪(Trace):代表一次请求的完整生命周期,包括多个服务和操作。

  • 跨度(Span):代表一次操作或事件,跨度通常包含有关操作的信息,如名称、持续时间和标签。

  • 采样(Sampling):用于确定哪些请求应该记录并进行跟踪,以防止数据过于庞大。

使用 Spring Cloud Sleuth 进行分布式追踪

Spring Cloud Sleuth是Spring Cloud的一部分,它提供了在Spring Boot应用程序中进行分布式追踪的支持。Spring Cloud Sleuth集成了Zipkin,一个开源的分布式追踪系统,用于收集、存储和查询跟踪数据。以下是如何在Spring Boot应用程序中使用Spring Cloud Sleuth的步骤:

步骤1:添加依赖项

在您的Spring Boot项目的pom.xml文件中添加Spring Cloud Sleuth的依赖项:

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

步骤2:配置应用程序名称

您可以配置应用程序的名称,以便在分布式追踪中标识不同的应用程序。在application.propertiesapplication.yml文件中添加以下配置:

spring.application.name=my-service

步骤3:启动 Zipkin 服务器

要使用Spring Cloud Sleuth,您需要启动一个Zipkin服务器。您可以使用Docker、Java应用程序或其他方法来启动Zipkin服务器。以下是使用Docker启动Zipkin服务器的示例命令:

docker run -d -p 9411:9411 openzipkin/zipkin

步骤4:运行应用程序

运行您的Spring Boot应用程序。Spring Cloud Sleuth将自动为每个请求创建唯一的跟踪标识符,并记录相关的跟踪和跨度。

步骤5:查看追踪数据

打开浏览器并访问Zipkin服务器的Web界面(默认端口9411)。您将能够查看和分析应用程序的分布式追踪数据。

使用 Spring Cloud Sleuth 进行手动追踪

除了自动追踪外,Spring Cloud Sleuth还允许您手动创建和记录跟踪数据。这对于记录自定义事件或特定操作非常有用。以下是一个示例代码,演示如何在Spring Boot应用程序中手动创建跟踪:

import org.springframework.cloud.sleuth.annotation.NewSpan;
import org.springframework.stereotype.Service;

@Service
public class MyService {

    @NewSpan("custom-span-name")
    public void performCustomOperation() {
        // 在这里执行自定义操作
    }
}

在上述示例中,我们使用@NewSpan注解来创建一个新的跨度,您可以为跨度指定名称。然后,您可以在performCustomOperation方法中执行自定义操作,该操作将被记录到分布式追踪中。

使用 Sleuth 的 Trace 和 Span

在代码中,您可以通过 TracerSpan 来访问当前跟踪和跨度信息。以下是更多关于如何使用 TracerSpan 的示例代码,演示了它们的一些常见用法:

import org.springframework.cloud.sleuth.Tracer;
import org.springframework.cloud.sleuth.annotation.NewSpan;
import org.springframework.stereotype.Service;

@Service
public class MyService {

    private final Tracer tracer;

    public MyService(Tracer tracer) {
        this.tracer = tracer;
    }

    @NewSpan("custom-span-name")
    public void performCustomOperation() {
        // 访问当前跨度
        Span currentSpan = tracer.currentSpan();

        // 访问当前跟踪
        Trace currentTrace = tracer.currentTrace();

        // 创建一个自定义的子跨度
        Span customSpan = tracer.nextSpan().name("custom-subspan").start();
        try {
            // 在子跨度内执行操作
            // ...

            // 设置子跨度的标签
            customSpan.tag("custom-tag", "tag-value");
        } finally {
            // 完成子跨度
            customSpan.finish();
        }
    }
}

在上述示例中,我们注入了 Tracer 对象,它允许我们访问当前跟踪和跨度。我们还创建了一个自定义的子跨度,并在其中执行操作。最后,我们通过调用 finish() 方法来完成子跨度。您可以为跨度设置标签以添加有关操作的额外信息。

高级配置和自定义

Spring Cloud Sleuth 提供了丰富的配置选项和自定义功能,以适应不同的追踪需求。您可以配置要记录的采样率、设置追踪信息的导出方式,甚至将追踪数据发送到不同的追踪系统。

以下是一些高级配置示例:

配置采样率

您可以配置采样率以决定哪些请求应该记录和追踪。以下是一个示例配置,将采样率设置为50%:

spring.sleuth.sampler.probability=0.5

自定义导出

如果您想将追踪数据导出到不同的追踪系统,例如Jaeger或AWS X-Ray,您可以配置自定义的 SpanReporter。这需要一些额外的编程工作,但允许您集成其他追踪工具。

配置 Zipkin

如果您希望将追踪数据发送到 Zipkin 服务器之外的其他地方,您可以配置 Zipkin 发送器的类型。以下是一个示例配置,将追踪数据发送到自定义的远程服务器:

spring.zipkin.sender.type=web
spring.zipkin.base-url=http://custom-zipkin-server:9411/

结论

在分布式系统中进行追踪是确保应用程序性能和可用性的重要组成部分。Spring Cloud Sleuth 提供了一种方便而强大的方式来实现分布式追踪,它集成了 Zipkin,使您能够轻松查看和分析跟踪数据。通过使用 Spring Cloud Sleuth,您可以更好地了解应用程序的行为,快速诊断性能问题,并提高系统的可维护性。

本文介绍了如何在 Spring Boot 应用程序中集成 Spring Cloud Sleuth,并使用自动追踪、手动追踪、Trace 和 Span 来记录和分析分布式应用程序的性能数据。希望这篇文章对您有所帮助,让您更好地理解如何在 Spring Boot 应用程序中进行分布式追踪。通过使用 Spring Cloud Sleuth,您可以建立一个更可观察和可管理的分布式系统,提供更好的用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1076186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ceph入门到精通-Nginx超时参数分析设置

nginx中有些超时设置&#xff0c;本文汇总了nginx中几个超时设置 Nginx 中的超时设置包括&#xff1a; “client_body_timeout”&#xff1a;设置客户端向服务器发送请求体的超时时间&#xff0c;单位为秒。 “client_header_timeout”&#xff1a;设置客户端向服务器发送请…

【Azure 架构师学习笔记】-Azure Data Factory (5) --Data Flow

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Data Factory】系列。 接上文【Azure 架构师学习笔记】-Azure Data Factory (4)-触发器详解-事件触发器 前言 Azure Data Factory&#xff0c; ADF 是微软Azure 的ETL 首选服务之一&#xff0c; 是Azure data platfor…

gogs和drone如何配合使用

上篇介绍了drone和gogs安装方法&#xff0c;这次介绍这两个如何使用&#xff0c;此篇文章主要介绍在物理机上进行发布。 此处用到的java项目地址&#xff1a;https://gitee.com/huningfei/demo-test 一 配置gogs 1.1 在Gogs中配置指定仓库的”.drone.yml“文件 1.2 ssh-drone…

美容院微信小程序怎么添加会员管理功能

要为美容院的微信小程序添加会员管理功能&#xff0c;需要遵循以下步骤&#xff1a; 一、明确会员管理功能的定位和目标 首先&#xff0c;要明确会员管理功能的定位和目标。会员管理功能是美容院微信小程序的重要功能之一&#xff0c;它能够帮助美容院更好地管理会员信息、了解…

Cobalt Strike 4.9

Cobalt Strike 4.9 1. 工具介绍1.1. 工具添加1.2. 工具获取 2. 工具使用2.1. 添加权限并运行2.2. 连接服务端2.3. 连接成功 3. 安全性自查 1. 工具介绍 CS 是Cobalt Strike的简称&#xff0c;是一款渗透测试神器&#xff0c;常被业界人称为CS神器。Cobalt Strike已经不再使用MS…

软件测试简历项目经验怎么写?大厂面试手拿把掐

前言 在写简历之前&#xff0c;我们先来看看失败者的简历和成功者的简历之间有什么区别。为什么成功者的简历可以在求职中起到“四两拨千斤”的作用&#xff0c;而失败者的简历却被丢进了垃圾桶&#xff0c;这两者到底有什么不同&#xff1f; 成功的简历与失败的简历 我们发现…

每日一面系列之@Component和@Configuration区别

Configuration 和 Component 到底有何区别呢&#xff1f;我先通过如下一个案例&#xff0c;在不分析源码的情况下&#xff0c;小伙伴们先来直观感受一下这两个之间的区别。 Configurationpublic class JavaConfig01 { }Componentpublic class JavaConfig02 { } 首先&#xff…

常见算法-双骰子游戏(Craps)

常见算法-双骰子游戏&#xff08;Craps&#xff09; 1、说明 一个简单的双骰子游戏&#xff0c;游戏规则如下&#xff1a; 玩家掷两个骰子&#xff0c;点数为1到6&#xff0c; 如果第一次点数和为7或11&#xff0c;则玩家胜&#xff0c;如果点数和为2、3或12&#xff0c;则…

使用Jetson AGX Orin进行口罩识别

在 https://gitee.com/gpus/maskDetection_jetson 代码仓有个口罩识别的案例&#xff0c;我们来看看能不能在Jetson AGX Orin上搞定。 先将该代码仓fork到自己的代码仓&#xff08;以便魔改&#xff09; 回到自己的代码仓&#xff1a; 根据README.md来操作吧&#xff01; 首先…

Feign(替代RestTemplate)远程调用

Feign初步学习 定义 Feign 是一个基于 Java 的 HTTP 客户端库&#xff0c;它是 Spring Cloud 中的一部分&#xff0c;用于简化微服务之间的 HTTP 通信。与传统的使用 RestTemplate 来调用 RESTful 服务不同&#xff0c;Feign 提供了一种声明式、基于接口的方式来定义和调用 H…

YB2419是一款功能齐备,内置mos100%占空比高效率同步降压IC

产品描述: YB2419是一款功能齐备&#xff0c;应用极为简单&#xff0c;并兼顾应用的灵活性和广泛性&#xff0c;高性能&#xff0c;以及超高性价比的恒压恒流降压型DC-DC可持续输出4.2A,支持两路USB口同时输出。是一款输入耐压可达40V,4.5-40V输入电压条件正常工作&#xff0c…

基于SpringBoot的厨艺交流平台设计与实现

目录 前言 一、技术栈 二、系统功能介绍 食材分类管理 用户信息管理 菜谱分类管理 菜谱信息管理 食材信息管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 使用旧方法对厨艺交流信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息…

查找算法——二分查找法

一、介绍 首先需要将查找的数据排好序&#xff0c;再进行二分查找法来进行查找&#xff0c;二分查找是将数据范围不断分割为两份&#xff0c;不断比较中间值与待查找值的大小来确定其在哪个区间范围的一种方法。例如&#xff1a;在一组数据&#xff08;1&#xff0c;4&#xff…

零基础Linux_14(基础IO_文件)缓冲区+文件系统inode等

目录 1. 缓冲区 1.1 缓冲区的存在 1.2 缓冲区的刷新策略 1.3 模拟C标准库中的文件操作 完整代码及验证&#xff1a; 1.4 重看缓冲区 1.5 stdout和stderr的区别 2. 文件系统 2.1 磁盘的物理结构CHS等 2.2 磁盘的抽象结构LBA等 2.3 文件管理inode等 2.4 对文件的操作…

Bytebase 2023 第三季度回顾

开工快乐&#xff01;2023 的第三个季度转眼过去了&#xff0c;一起来看看 Bytebase 过去几个月干得如何&#xff1f; &#x1f4f0; 公司动态 Bytebase 突破百万下载。和 GitLab 签署 Technology Partner 技术合作伙伴协议。中东 Shopify 使用 Bytebase 构建一站式数据库开发…

节能减排 | AIRIOT智慧工厂节能管理解决方案

工厂作为高能耗的生产型企业&#xff0c;降低能耗和提升资源利用率方面就显得很重要&#xff0c;对实施国家倡导的节能降耗、绿色发展有着很大程度上的必要性。然而&#xff0c;工厂能源管理从传统手段向智能化升级转型的过程中&#xff0c;企业也不可避免的面临一些痛点和挑战…

在线刷题答题小程序开发现成源码搭建 功能丰富 支持在线考试+刷题 源码开源可二开

在线考试和刷题成为了学习的一种趋势&#xff0c;越来越多的人开始通过在线平台进行自我学习和提升。为了满足这一需求&#xff0c;开发一款功能丰富、支持在线考试和刷题的答题小程序成为了热门的需求。分享一款在线刷题答题小程序源码&#xff0c;功能丰富&#xff0c;支持在…

分布式搜索系统的设计

介绍 如今&#xff0c;我们几乎在每个网站上都看到一个搜索栏。搜索栏使我们能够快速找到我们需要的内容。 让我们举个例子。想象一下&#xff0c;如果YouTube没有提供搜索栏&#xff0c;我们如何在数百万个视频中找到特定的视频&#xff0c;这些视频多年来都已上传到YouTube&a…

【git merge/rebase】详解合并代码、解决冲突

目录 1.概述 2.merge 3.rebase 4.merge和rabase的区别 5.解决冲突 1.概述 在实际开发中&#xff0c;一个项目往往是多个人一起协作的&#xff0c;头天下班前大家把代码交到远端仓库&#xff0c;第二天工作的第一件事情都是从服务器上拉最新的代码&#xff0c;保证代码版本…

【pytorch】模型的保存与加载|| Dataloader数据加载器

Pytorch模型保存与加载&#xff0c;并在加载的模型基础上继续训练 系统学习Pytorch笔记三&#xff1a;Pytorch数据读取机制(DataLoader)与图像预处理模块(transforms) 一、只保存参数 1. 保存 一般地&#xff0c;采用一条语句即可保存参数&#xff1a; torch.save(model.s…