Spring Cloud全解析:链路追踪之springCloudSleuth简介

embedded/2024/12/22 19:58:17/

文章目录

    • springCloudSleuth简介
      • 链路追踪?
      • SpringCloudSleuth
        • 术语
        • 链路示意图
        • zipkin
          • 依赖
          • 配置


springCloudSleuth简介

链路追踪?

什么是链路追踪?就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,如各个服务节点的耗时、具体请求的服务器、各节点的请求状态等,主要是用于分布式系统进行问题定位

SpringCloudSleuth

SpringCloudSleuth是SpringCloud提供的一套分布式服务跟踪的解决方案,并且支持zipkin

术语
  • span 跨度:基本工作单元,span使用一个64位的id唯一标识,还包含有描述、时间戳、span 父id等,根span被称为root span,该span的id与trace id相等
  • trace 跟踪:一组共享root span的span组成的树状结构称为trace,trace中的所有span都共享该trace的id
  • annotation 标注:annotation用来记录事件的存在,其中核心annotation用来定义请求的开始和结束
    • CS(Client Sent 客户端发送):客户端发起一个请求,该annotation描述了span的开始
    • SR (Server Received服务端接收):服务器端获得请求并准备处理它,使用SR减去CS时间戳,可以得到网络延迟
    • SS (Server Sent 服务端发送):该annotation表示完成请求处理,使用SS减去SR时间戳,可以得到服务端处理请求的时间
    • CR (Client Received 客户端接收):span结束标识,客户端成功接收到服务端的响应,CR减去CS时间戳,可以得到客户端发送请求到服务器响应的时间
链路示意图

一条链路根据TraceId唯一标识,SpanId标识发起的请求信息,各span通过parentId串联起来

链路

TraceId类似于树结构的Span集合,表示一条调用链路,作为链路的全局唯一标识

Span表示调用链路的来源,之间存在着父子关系,上游span是下游span的父span,一个span就是一次请求信息

zipkin

Zipkin是Twitter开源的分布式跟踪系统,主要功能是收集系统的时序数据,从而追踪微服务架构的系统延时等问题。架构中包含Reporter,Transport,Colletor,Storage,API,UI几个部分

Reporter

集成在每个服务的代码中,负责Span的生成,带内数据(traceid等)的传递,带外数据(span)的上报,采样控制

Transport

为带外数据上报的通道,zipkin支持http和kafka两种方式

Colletor

负责接收带外数据,并插入到集中存储中

Storage

为存储组件,适配底层的存储系统,zipkin提供默认的in-memory存储,并支持Mysql,Cassandra,ElasticSearch存储系统

API

提供查询、分析和上报链路的接口。接口的定义见zipkin-api

UI

用于展示页面展示

依赖
<!-- 链路跟踪  包含sleuth和zipkin -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
配置
spring:# 链路跟踪zipkin:base-url: http://localhost:9411 #zipkin的地址sleuth:sampler:probability: 1 #采样率,1表示全部采集

之后进行访问就可以在zipkin中看到请求的调用链路了

参考文献

  • springCloudSleuth简介

http://www.ppmy.cn/embedded/125375.html

相关文章

Unity3D游戏的内存控制详解

Unity3D是一款流行的游戏引擎&#xff0c;支持多种平台&#xff0c;包括PC、移动设备和VR等。随着游戏的复杂性不断提高&#xff0c;Unity3D的内存管理变得尤为重要。本文将详细介绍Unity3D游戏中的内存控制技术&#xff0c;包括自动内存管理、对象池、延迟加载资源和手动清理资…

【鸿蒙开发】深入理解鸿蒙开发中的@State装饰器:掌握组件内状态管理

文章目录 State装饰器的含义State装饰的变量的特点&#xff1a;State装饰器的作用代码示例自动更新UI输入数据值传递 总结本文参考华为开发者官网内容&#xff1a; 在鸿蒙&#xff08;HarmonyOS&#xff09;开发中&#xff0c;使用ArkTS&#xff08;Ark TypeScript&#xff09;…

用Python编写一个Web爬虫:自动获取感兴趣的新闻

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在当今信息化社会中,获取新闻信息的方式已变得多样化。除了传统的新闻订阅和新闻推送服务,使用编程技术自动抓取感兴趣的新闻也成为了许多开发者和技术爱好者的选择。本文将详细介绍如何使用Python编写一个简单…

基于ZABBIX监控 RabbitMQ服务开箱模板汉化及适用性改造

概述: 因为工作的需要,要监控RabbitMQ的状态,看到zabbix里面自带开箱模板,就直接套用,但是发现很多监控项及LLD jsonpath的问题,导致无法使用,自己重新开发耗时耗力,便想着边研究边解决,本文将贴出zabbix原版的模板文件及部分适用性改造例子,并附上最终完善及汉化后…

双指针_复写零_C++

双指针_复写零_C 1. 题目解析2. 算法解析3. 代码实现 1. 题目解析 leetcode链接&#xff1a;https://leetcode.cn/problems/duplicate-zeros/ 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&a…

边学边用docker-为什么要进到容器里面修改权限

在 Docker 容器中修改文件夹权限&#xff0c;通常需要进入容器内部来执行命令&#xff0c;这是因为 Docker 容器提供了一个隔离的环境&#xff0c;其内部的文件系统与宿主机是隔离的。 1. 隔离性&#xff1a;Docker 容器设计为轻量级的隔离环境&#xff0c;每个容器都有自己的…

C#系统学习路线

分享一个C#程序员的成长学习路线规划&#xff0c;希望能够帮助到想从事C#开发的你。 我一直在想&#xff0c;初学者刚开始学习编程时应该学些什么&#xff1f;学习到什么程度才能找到工作&#xff1f;才能在项目中发现和解决Bug&#xff1f; 我不知道每位初学者在学习编程时是…

【unity进阶知识8】unity场景Scene的使用, 如何封装一个场景管理器

文章目录 一、场景基本操作1、加载切换场景2、获取场景信息3、激活场景4、场景基本属性获取5、已加载场景个数6、获取场景中所有物体7、创建新场景8、卸载销毁场景 二、使用协程方法来异步加载场景1、AsyncOperation相关的代码应写在一个协同程序中。2、allowSceneActivation加…