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

在这里插入图片描述

                                                                              💧 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 来查看请求的跟踪信息和调用链路。


在这里插入图片描述


🐳结语

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣 257. 二叉树的所有路径

题目来源&#xff1a;https://leetcode.cn/problems/binary-tree-paths/description/ C题解1&#xff1a;使用递归&#xff0c;声明了全局变量result&#xff0c;遇到叶子节点就将字符串添加到result中。 递归三步法&#xff1a; 1. 确认传入参数&#xff1a;当前节点已有路径…

如何保证API接口的安全性

API接口的安全性是非常重要的&#xff0c;以下是一些保证API接口安全性的措施&#xff1a; 用户认证、授权&#xff1a;接口的调用者必须提供有效的身份认证信息&#xff0c;包括用户名、密码、密钥等&#xff0c;以保证接口的调用者的身份有效性。同时&#xff0c;需要在接口的…

echarts的基础知识和配置项

异步数据加载和更新 ECharts 中在异步更新数据的时候需要通过series的name属性对应到相应的系列&#xff0c;如果没有name&#xff0c;series就会根据数组的顺序索引&#xff0c;把数据跟前面的配置对应上 loading动画 如果数据加载时间较长&#xff0c;一个空的坐标轴放在画…

基于深度学习的高精度人脸口罩检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度人脸口罩检测识别系统可用于日常生活中或野外来检测与定位人脸口罩目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的人脸口罩目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5…

《面试1v1》Redis持久化

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

<Oracle>《Linux 下安装Oracle数据库 - Oracle 19C By CentOS 8 》(第一部分)

《Linux 下安装Oracle数据库 - Oracle 19C By CentOS 8 》&#xff08;第一部分&#xff09; 1 说明1.1 前言1.2 资源下载 2 安装步骤2.1 上传安装包2.2 下载数据库预安装包2.3 安装数据库预安装包 1 说明 1.1 前言 本文是Linux系统命令行模式安装Oracle数据库的学习实验记录…

【C++实现二叉树的遍历】

目录 一、二叉树的结构二、二叉树的遍历方式三、源码 一、二叉树的结构 二、二叉树的遍历方式 先序遍历&#xff1a; 根–>左–>右中序遍历&#xff1a; 左–>根–>右后序遍历&#xff1a;左–>右–>根层次遍历&#xff1a;顶层–>底层 三、源码 注&am…

云原生监控平台 Prometheus 从部署到监控

1.监控系统架构设计 角色 节点 IP地址 监控端 Prometheus &#xff0c;Grafana&#xff0c;node_exporter &#xff0c;Nginx 47.120.35.251 被监控端1 node_exporter 47.113.177.189 被监控端2 mysqld_exporter&#xff0c;node_exporter&#xff0c;Nginx&#xff…

ivx低代码开发平台

前言 低代码开发平台&#xff08;Low-Code Development Platform, LCDS&#xff09;为企业和开发者提供了高效的应用开发方式。在2023年&#xff0c;中国的低代码开发平台正在快速发展&#xff0c;以下是其中最受关注的十大平台&#xff1a; iVX&#xff1a;iVX是一款新型的低代…

react总结

一、React 入门 1.1 特点 高性能、声明式、组件化、单向响应的数据流、JSX扩展、灵活 1.2 React初体验 <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&quo…

跨越时空限制,酷暑天气用VR看房是一种什么体验?

近年来&#xff0c;全球厄尔尼诺现象越来越频繁&#xff0c;夏季温度不断创下新高&#xff0c;持续大范围的高温天气让人们对出门“望而生畏”。很多购房者也不愿意在如此酷暑期间&#xff0c;四处奔波看房&#xff0c;酷暑天气让带看房效率大大降低&#xff0c;更有新闻报道&a…

VSCode+GDB+Qemu调试ARM64 linux内核

俗话说&#xff0c;工欲善其事 必先利其器。linux kernel是一个非常复杂的系统&#xff0c;初学者会很难入门。 如果有一个方便的调试环境&#xff0c;学习效率至少能有5-10倍的提升。 为了学习linux内核&#xff0c;通常有这两个需要 可以摆脱硬件&#xff0c;方便的编译和…

基于open62541库的OPC UA协议节点信息查询及多节点数值读写案例实践

目录 一、OPC UA协议简介 二、open62541库简介 三、 opcua协议的多点查询、多点读写案例服务端opcua_server 3.1 opcua_server工程目录 3.2 程序源码 3.3 工程组织文件 3.4 编译及启动 四、opcua协议的多点查询、多点读写案例客户端opcua_client 4.1 opcua_client工程目录 4…

使用 Jetpack Compose 构建 Spacer

欢迎阅读本篇关于如何使用 Jetpack Compose 构建 Spacer 的博客。Jetpack Compose 是 Google 的现代 UI 工具包&#xff0c;主要用于构建 Android 界面。其声明式的设计使得 UI 开发更加简洁、直观。 一、什么是 Spacer&#xff1f; 在 UI 设计中&#xff0c;我们通常需要在不…

CSS之平面转换

简介 作用&#xff1a;为元素添加动态效果&#xff0c;一般与过渡配合使用 概念&#xff1a;改变盒子在平面内的形态&#xff08;位移、旋转、缩放、倾斜&#xff09; 平面转换也叫 2D 转换&#xff0c;属性是 transform 平移 transform: translate(X轴移动距离, Y轴移动距…

【SpringCloud——Elasticsearch(下)】

一、数据聚合 聚合&#xff0c;可以实现对文档数据的统计、分析、运算。常见的聚合有三类&#xff1a; ①、桶聚合&#xff1a;用来对文档做分组 TermAggregation&#xff1a;按照文档字段值分组。Date Histogram&#xff1a;按照日期解题分组&#xff0c;例如一周为一组&am…

javaee sql注入问题

jsp页面 <% page language"java" contentType"text/html; charsetutf-8"pageEncoding"utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> &…

QT树的实现

理论 在Model/View结构中&#xff0c;数据模型为视图组件和代理组件提供存取数据的标准接口。在QT中&#xff0c;所有的数据模型类都从QAbstactItemModel继承而来&#xff0c;不管底层的数据结构是如何组织数据的&#xff0c;QAbstractItemModel的子类都以表格的层次结构表示数…

大数据需要一场硬件革命

光子盒研究院 计算领域的进步往往集中在软件上&#xff1a;华丽的应用程序和软件可以跟踪人和生态系统的健康状况、分析大数据&#xff0c;并在智力竞赛中击败人类冠军。与此同时&#xff0c;对支撑所有这些创新的硬件进行全面改革的努力相对来说&#xff0c;略显小众。 自2020…

Scala里的WordCount 案例

7.7.5 普通 WordCount 案例 package chapter07object TestWordCount__简单版 {def main(args: Array[String]): Unit {//单词计数&#xff1a;将集合中出现的相同单词计数&#xff0c;进行计数&#xff0c;取计数排名的前三的结果val stringList List("Hello Scala Hbas…