【Spring Cloud Sleuth 分布式链路跟踪】 —— 每天一点小知识

news2024/9/21 18:39:36

在这里插入图片描述

                                                                              💧 S p r i n g C l o u d S l e u t h 分布式链路跟踪 \color{#FF1493}{Spring Cloud Sleuth 分布式链路跟踪} SpringCloudSleuth分布式链路跟踪💧          


🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 《数据结构与算法》专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
💧 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 💐
🥣 《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~ 🌊
🪁 希望本文能够给读者带来一定的帮助~🌸文章粗浅,敬请批评指正!🐥


文章目录

  • 🐳Spring Cloud Sleuth 分布式链路跟踪
    • Spring Cloud Sleuth 概述
      • 为什么需要分布式链路跟踪?
      • Spring Cloud Sleuth 是什么?
      • Spring Cloud Sleuth 能解决什么问题?
    • 搭建链路监控步骤
      • 1. Zipkin 的介绍与安装
        • Zipkin 是什么?
        • 安装 Zipkin
      • 2. 服务提供者
      • 3. 服务消费者
      • 4. 启动服务并进行访问
    • 总结
  • 🐳结语


当然可以!以下是关于 “Spring Cloud Sleuth 分布式链路跟踪” 的博客文章:

🐳Spring Cloud Sleuth 分布式链路跟踪

在微服务架构中,系统由多个服务组成,服务之间的调用关系错综复杂。当一个请求从一个服务发起并经过多个服务调用时,排查问题和分析性能瓶颈变得非常困难。为了解决这个问题,Spring Cloud Sleuth 提供了一种分布式链路跟踪的解决方案。本文将介绍 Spring Cloud Sleuth 的概念和用法,并通过一个案例来说明如何搭建链路监控。


Spring Cloud Sleuth 概述

为什么需要分布式链路跟踪?

  💧在微服务架构中,一个用户请求往往需要经过多个服务的调用才能完成。当请求出现问题或者需要排查性能问题时,我们需要追踪整个请求的路径,并找到请求的每个阶段所消耗的时间。这就是分布式链路跟踪的作用,它能够帮助我们快速定位问题,并进行性能分析。

Spring Cloud Sleuth 是什么?

  💧Spring Cloud Sleuth 是 Spring Cloud 生态系统中的一个组件,用于实现分布式系统的请求跟踪。它基于 Google 的开源项目 Dapper 实现,并集成了 Zipkin 分布式跟踪系统。Spring Cloud Sleuth 提供了一套标准化的解决方案,通过在请求中添加唯一的标识符和跟踪信息,实现了整个分布式系统的链路追踪和性能分析。

Spring Cloud Sleuth 能解决什么问题?

  • 请求追踪:Spring Cloud Sleuth 为每个请求生成唯一的跟踪标识符,并在请求的每个阶段添加跟踪信息。这使得我们能够准确追踪请求经过的每个服务和调用路径。

  • 性能分析:通过收集和聚合跟踪信息,Spring Cloud Sleuth 可以提供性能分析功能。我们可以了解每个请求的处理时间和耗时情况,识别性能瓶颈并进行优化。

  • 故障排查:当一个请求出现问题时,我们可以通过分析跟踪信息来定位问题。Spring Cloud Sleuth 提供了请求的完整调用链,可以帮助我们快速定位故障点并进行排查。


  💧现在,让我们一步一步搭建链路监控,并使用 Docker 启动 Zipkin 作为跟踪系统 ↓

搭建链路监控步骤

1. Zipkin 的介绍与安装

Zipkin 是什么?

Zipkin 是一个分布式跟踪系统,用于收集、存储和展示分布式系统中的跟踪数据。它提供了一个用户友好的界面,用于可视化分析请求的调用链路和性能指标。

安装 Zipkin

  💧首先,我们需要使用 Docker 安装和运行 Zipkin。确保你已经安装了 Docker。

  💧在终端或命令行中执行以下命令来下载并运行 Zipkin 容器:

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

  💧这将下载并运行 Zipkin 容器,并将容器的 9411 端口映射到本地的 9411 端口。

2. 服务提供者

  💧我们将创建一个简单的 Spring Boot 服务作为示例的服务提供者。首先,创建一个新的 Spring Boot 项目,添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

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

  💧application.properties 文件中,添加以下配置:

spring.application.name=service-provider

  💧创建一个 REST Controller 类,用于处理请求:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloWorldController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

  💧在启动类上添加 @EnableZipkinServer 注解,以启用 Zipkin 客户端:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import zipkin.server.internal.EnableZipkinServer;

@SpringBootApplication
@EnableZipkinServer
public class ZipkinServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZipkinServerApplication.class, args);
    }
}

3. 服务消费者

接下来,我们创建一个使用服务提供者的服务消费者。创建一个新的 Spring Boot 项目,添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

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

application.properties 文件中,添加以下配置:

spring.application.name=service-consumer
spring.zipkin.base-url=http://localhost:9411

创建一个 REST Controller 类,用于向服务提供者发送请求:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ConsumerController {

    @Autowired
   

 private Tracer tracer;

    @GetMapping("/consume")
    public String consume() {
        // 创建 RestTemplate 对象
        RestTemplate restTemplate = new RestTemplate();
        // 发送请求
        ResponseEntity<String> response = restTemplate.getForEntity("http://localhost:8080/hello", String.class);
        // 输出响应结果
        String result = response.getBody();
        // 打印当前跟踪信息
        System.out.println("TraceId: " + tracer.currentSpan().context().traceId());
        return result;
    }
}

在启动类上添加 @EnableZipkinServer 注解,以启用 Zipkin 客户端:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import zipkin.server.internal.EnableZipkinServer;

@SpringBootApplication
@EnableZipkinServer
public class ZipkinServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZipkinServerApplication.class, args);
    }
}

4. 启动服务并进行访问

  💧首先,启动服务提供者和服务消费者的应用程序。确保两个应用程序都成功启动。

  💧然后,使用浏览器或者 API 工具访问服务消费者的 /consume 路径,例如:http://localhost:8081/consume。

  💧在 Zipkin 界面中,你应该可以看到请求的跟踪信息和调用链路。


总结

通过 Spring Cloud Sleuth 和 Zipkin,我们可以方便地实现分布式系统的链路跟踪和性能分析。本文介绍了 Spring Cloud Sleuth 的概念和用法,并通过一个案例演示了如何搭建链路监控。我们通过 Docker 安装了 Zipkin,并创建了一个简单的服务提供者和消费者。最后,我们使用 Zipkin 来查看请求的跟踪信息和调用链路。


在这里插入图片描述


🐳结语

🐬初学一门技术时,总有些许的疑惑,别怕,它们是我们学习路上的点点繁星,帮助我们不断成长。

🐟积少成多,滴水成河。文章粗浅,希望对大家有帮助!

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

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

相关文章

scratch lenet(9): C语言实现tanh的计算

文章目录 1. 目的2. tanh ⁡ ( x ) \tanh(x) tanh(x) 的 naive 实现2.1 数学公式2.2 naive 实现 3. tanh ⁡ ( x ) \tanh(x) tanh(x) 的快速计算3.1 Maple 中的近似公式3.2 tan_c3()3.3 Gauss 连分数公式 (Continued Fraction) 4. 最终代码和运行结果代码运行结果 5. 其他Ref…

使用python制作常用图表

案例01 制作柱形图展示数据的对比关系——员工销售业绩统计表.xlsx import xlwings as xw app xw.App(visibleTrue, add_bookFalse) workbook app.books.open(员工销售业绩统计表.xlsx) # 打开要制作图表的工作簿 for i in workbook.sheets: # 遍历工作簿中的工作表chart i…

node.js安装及配置教程(win11)

node.js安装及配置教程&#xff08;win11&#xff09; 一、下载二、安装三、环境配置 一、下载 官网下载&#xff1a;点击下载 根据自己电脑的位数选择对应的版本即可 网盘下载&#xff1a;点击下载 二、安装 下载完成后&#xff0c;双击运行程序&#xff0c;点击next 勾…

iOS自动化环境搭建(超详细)

1.macOS相关库安装 libimobiledevice > brew install libimobiledevice 使用本机与苹果iOS设备的服务进行通信的库。 ideviceinstaller brew install ideviceinstaller 获取设备udid、安装app、卸载app、获取bundleid carthage > brew install carthage 第三方库…

【Redis】Redis最佳实践/经验总结

【Redis】Redis最佳实践/经验总结 文章目录 【Redis】Redis最佳实践/经验总结1. Redis键值设计1.1 优雅的key结构1.2 拒绝BigKey1.2.1 BigKey的危害1.2.2 如何发现BigKey1.2.3 如何删除BigKey 1.3 恰当的数据类型1.3.1 例11.3.2 例2 2. 批处理优化2.1 Pipeline2.1.1 单个命令的…

ROM和RAM的工作原理(DRAM和DROM)以及DRAM的刷新方法

只读存储器ROM: ROM和RAM都是支持随机存取的存储器&#xff0c;其中SRAM和DRAM均为易失性半导体存储器。而ROM中一旦有了信息&#xff0c;就不能轻易改变&#xff0c;即使掉电也不会丢失&#xff0c;它在计算机系统中是只供读出的存储器。ROM器件有两个显著的优点: 1)结构简单&…

RabbitMQ 消息丢失的场景,如何保证消息不丢失?

一.RabbitMQ消息丢失的三种情况 第一种&#xff1a;生产者弄丢了数据。生产者将数据发送到 RabbitMQ 的时候&#xff0c;可能数据就在半路给搞丢了&#xff0c;因为网络问题啥的&#xff0c;都有可能。 第二种&#xff1a;RabbitMQ 弄丢了数据。MQ还没有持久化自己挂了 第三种…

软考A计划-系统集成项目管理工程师--一般常识-中

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

【深度学习推荐系统 理论篇】一、Wide Deep Learning for Recommender Systems

前言 在搜广推业务做了3年工程&#xff0c;最近终于有空整理下&#xff0c;完整的梳理下自己的知识架构&#xff08;预计分为理论篇/工程篇&#xff09; Wide & Deep论文链接&#xff1a;https://arxiv.org/abs/1606.07792 另外王喆老师《深度学习推荐系统》中&#xff…

安装 Nginx 服务

一.安装 Nginx 服务 1.关闭防火墙 开机自启起 安全机制 systemctl stop firewalld systemctl disable firewalld setenforce 0 2、安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make 3、创建运行用户 useradd -M -s /sbin/nologin nginx 4、编译安装 cd …

总结908

学习目标&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;背诵15篇短文&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化3讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日必复习&#xff08;5分钟&#xff09;…

永磁同步直线电机学习笔记——直线电机的数学模型

永磁直线电机数学模型的建立&#xff0c;是进行后续控制仿真和实验的前提。为了实现永磁同步直线电机的矢量控制&#xff0c;需要把永磁同步直线电机假想成永磁同步旋转电机&#xff0c;借鉴旋转电机的电流分析方式&#xff0c;实现dq轴电流控制的解耦&#xff0c;并且把永磁同…

为什么常见电路板GND与外壳GND之间接一个电阻一个电容

集电极开路是指集电极电路中出现了断路的情况&#xff0c;导致电路无法正常工作。在集电极开路的情况下&#xff0c;电路中的电流无法通过集电极流过&#xff0c;导致电路无法正常放大信号或者控制其他器件的工作。 集电极开路的原因有很多&#xff0c;可能是器件本身的故障、…

C++进阶—继承(下)菱形(虚拟)继承分析虚拟继承存储对象模型

目录 0. 前言 1. 普通多继承下&#xff0c;基类和派生类复制转换底层细节(切片) 2. 多继承下的复杂菱形继承 3. 菱形虚拟继承(虚基类)重点 3.1 菱形非虚拟继承对象存储模型 3.2 菱形虚拟继承对象存储模型 3.3 虚拟继承对象存储模型 3.4 多对象继承关系分析其虚基类&…

Redis原理 - 内存策略

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis 本身是一个典型的 key-value 内存存储数据库&#xff0c;因此所有的 key、value 都保存在之前学习过的 Dict 结构中。不过在其 database 结构体中&#xff0c;有两个 Dict &#xff1a;一个用来记录 key-value&#xf…

【计算机网络详解】——软件定义网络SDN(学习笔记)

目录 &#x1f552; 1. 概念&#x1f552; 2. OpenFlow 协议 &#x1f552; 1. 概念 软件定义网络&#xff08;Software Defined Network&#xff0c;SDN&#xff09;的概念最早由斯坦福大学的Nick McKeown教授于2009年提出。SDN最初只是学术界讨论的一种新型网络体系结构。SD…

基于JAVA实现的简易学生信息管理系统(附源码)

一、前言 最近在学习JAVA&#xff0c;这几天跟着网上的视频学完基础知识之后&#xff0c;做了一个学生信息管理系统&#xff0c;写的比较普通&#xff0c;没太大亮点&#xff0c;希望可以给初学者一些参考经验&#xff0c;另外&#xff0c;如有不恰当的地方还请各位指正&am…

论文解读:End-to-End Object Detection with Transformers

发表时间&#xff1a;2020 论文地址&#xff1a;https://arxiv.org/pdf/2005.12872.pdf 项目地址&#xff1a;https://github.com/facebookresearch/detr 提出了一种将对象检测视为集合预测问题的新方法。我们的方法简化了检测流程&#xff0c;有效地消除了许多手工设计的组件…

解决跨域问题的两种方案

说明&#xff1a;跨域是指&#xff0c;在A向B发送请求时&#xff0c;如果A和B的协议、端口号和域名有一个不相同。跨域问题是指&#xff0c;浏览器出于安全&#xff0c;会阻止跨域的异步请求&#xff08;如Ajax&#xff09;&#xff0c;而在分布式的开发环境下&#xff0c;跨域…

ChatGPT在媒体与娱乐领域的沉浸式场景:虚拟主持人和创意助手的新应用探索

第一章&#xff1a;引言 在当今数字化时代&#xff0c;人工智能技术在媒体与娱乐领域的应用日益广泛。ChatGPT作为一种先进的自然语言处理模型&#xff0c;具备强大的对话生成能力和创造力&#xff0c;为媒体与娱乐产业带来了新的创意和可能性。本文将探讨ChatGPT在媒体与娱乐…