SpringCloud链路追踪——Spring Cloud Sleuth 和 Zipkin 介绍 Windows 下使用初步

前言
在微服务中,随着服务越来越多,对调用链的分析越来越复杂。如何能够分析调用链,定位微服务中的调用瓶颈,并对其进行解决。
本篇博客介绍springCloud中用到的链路追踪的组件,Spring Cloud Sleuth和Zipkin,介绍基本的概念,并给出了一个入门的使用案例。

目录
- 前言
- 引出
- 链路追踪
- 有啥用?
- Spring Cloud Sleuth
- Zipkin
- 入门案例
- 1.启动zipkin 的jar包
- 2.引入依赖
- 3.进行配置
- 4.启动项目
- 5.发送请求查看zipkin
- 标记:Linux运行失败
- 总结
引出
1.链路追踪的组件,Spring Cloud Sleuth和Zipkin,介绍基本的概念;
2.给出了一个入门的使用案例;
链路追踪
有啥用?
在微服务中,随着服务越来越多,对调用链的分析越来越复杂。
出现问题:
- 1.微服务之间的调用错综复杂,用户发送的请求经历哪些服务,调用链不清楚,没有一个自动化的工具类来维护调用链;
- 2.无法快速定位调用链中哪个环节出了问题;
- 3.无法快速定位调用链中哪个环节比较耗时;
Spring Cloud Sleuth
Sleuth是SpringCloud的子项目,全称SpringCloud-Sleuth,提供分布式系统中链路追踪解决方案,同类产品还有Cat由大众点评开源,基于java开发的实时应用监控平台,包括实时应用监控、业务监控。集成方案是通过代理码埋点的方式来实现监控。
Spring Cloud Sleuth采用的是Google的开源项目Dapper的专业术语。
- Span:基本工作单元,发送一个远程调度任务 就会产生一个Span,Span是一个64位ID唯一标识的,Trace是用另一个64位ID唯一标识的,Span还有其他数据信息,比如摘要、时间戳事件、Span的ID、以及进度ID。
- Trace:一系列Span组成的一个树状结构。请求一个微服务系统的API接口,这个API接口,需要调用多个微服务,调用每个微服务都会产生一个新的Span,所有由这个请求产生的Span组成了这个Trace。
- Annotation:用来及时记录一个事件的,一些核心注解用来定义一个请求的开始和结束 。这些注解包括以下:
- cs - Client Sent -客户端发送一个请求,这个注解描述了这个Span的开始
- sr - Server Received -服务端获得请求并准备开始处理它,如果将其sr减去cs时间戳便可得到网络传输的时间。
- ss - Server Sent (服务端发送响应)–该注解表明请求处理的完成(当请求返回客户端),如果ss的时间戳减去sr时间戳,就可以得到服务器请求的时间。
- cr - Client Received (客户端接收响应)-此时Span的结束,如果cr的时间戳减去cs时间戳便可以得到整个请求所消耗的时间。

运行时后台的日志

1.span属性
代表了一组基本的工作单元。为了统计各个处理单元的延迟,当请到达各个服务组件的时候,也通过一个唯一标识(SpanId)来标记它的开始、具体过程和结合。通过SpanId的开始和结束时间戳,就能统计该Span的调用时间,除此之外,还可以获取如事件的名称、请求信息等元数据。简单来说,服务调用链中,每一个服务都是一个Span,每个Span都有自己的spanId属性、parentId属性、traceId属性
2.trace
由一组traceId相同的Span串联形成的一个树状结构。为了实现请求跟踪,当请求到达分布式系统的入口端点时,需要服务跟踪框架为该请求创建一个唯一标识(traceId),同时在分布式系统内部流转的时候,框架始终保持传递该唯一值,直到整个请求的返回。那么就可以使用该唯一标识将所有请求串联起来,形成一条完整的请求链路。
简单来说,具有相同traceId的Span,服务调用串联起来的树状结构。
但是这些都不直观,所以需要用Zipkin
Zipkin
Zipkin 是一个开放源代码分布式的跟踪系统,由Twitter公司开源,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现每个服务向zipkin报告计时数据,zipkin会根据调用关系通过Zipkin UI生成依赖关系图,显示了多少跟踪请求通过每个服务,该系统让开发者可通过一个 Web 前端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈。
Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。接下来的测试为方便直接采用In-Memory方式进行存储,生产推荐Elasticsearch
官网:https://zipkin.io/

入门案例
1.启动zipkin 的jar包
java -jar

2.引入依赖

<!-- Sleuth是SpringCloud的子项目,全称SpringCloud-Sleuth,提供分布式系统中链路追踪解决方案--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId></dependency><!-- Zipkin 是一个开放源代码分布式的跟踪系统,由Twitter公司开源,它致力于收集服务的定时数据--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId><version>2.2.5.RELEASE</version></dependency>
3.进行配置

spring:# zipkin配置zipkin:base-url: http://127.0.0.1:9411 # zipkin服务地址discovery-client-enabled: false # 禁止zipkin把自己当做nacos-client向nacos-server注册# sleuth配置sleuth:sampler:rate: 100 # sleuth抽样率默认是10%,设置为100表示100%请求上报zipkin
4.启动项目

如果把依赖注释掉:

5.发送请求查看zipkin

查看调用链的响应时间,从而确定服务的瓶颈

点击可以更详细地查看

标记:Linux运行失败

启动了zipkin

开放了端口

访问失败,似乎是跨域的问题

总结
1.链路追踪的组件,Spring Cloud Sleuth和Zipkin,介绍基本的概念;
2.给出了一个入门的使用案例;
相关文章:
SpringCloud链路追踪——Spring Cloud Sleuth 和 Zipkin 介绍 Windows 下使用初步
前言 在微服务中,随着服务越来越多,对调用链的分析越来越复杂。如何能够分析调用链,定位微服务中的调用瓶颈,并对其进行解决。 本篇博客介绍springCloud中用到的链路追踪的组件,Spring Cloud Sleuth和Zipkin…...
深入探究音视频开源库 WebRTC 中 NetEQ 音频抗网络延时与抗丢包的实现机制
目录 1、引言 2、什么是NetEQ? 3、NetEQ技术详解 3.1、NetEQ概述 3.2、抖动消除技术 3.3、丢包补偿技术 3.4、NetEQ概要设计 3.5、NetEQ的命令机制 3.6、NetEQ的播放机制 3.7、MCU的控制机制 3.8、DSP的算法处理 3.9、DSP算法的模拟测试 4、NetEQ源文件…...
一篇文章教会你C++11入门知识点
C11入门 列表初始化1. {}初始化2. initializer_list 声明1. auto2. decltype3. nullptr 范围for循环STL新增容器1. array2. forward_list3. unordered_map和unordered_set 右值引用和移动语义1. 左值引用和右值引用2. 左值引用和右值引用比较3. 右值引用使用场景和意义4. 右值引…...
idea leetcode配置
idea leetcode配置 配置页面如下图所示,根据需要,填入登录用户名、密码、文件存放路径,注意如果要使用自定义的代码结构配置,要勾选图中框出来的选项。 Code FileName: $!velocityTool.camelCaseName(${question.tit…...
Golang通道(Channel)原理解析
引言 并发编程是现代软件开发中的一个重要主题。Golang作为一门并发友好的编程语言,提供了一种简单而强大的机制,即通道(Channel),用于在不同的Goroutine之间进行通信和同步。通道的设计和原理是Golang并发模型的核心…...
使用树莓派搭建文件共享服务器-samba服务器
局域网内部通过文件共享来传输文件是一种非常方便的方式,小米摄像头也支持用文件共享smb模式将视频备份到局域网中的文件服务器上。之前我一直使用荣耀pro路由器游戏版,是自带USB接口支持文件共享服务的,接上USB移动硬盘,小米摄像…...
GitLab使用webhook触发Jenkins自动构建
1、jenkins安装gitlab插件 在插件管理中,搜索gitlab安装这个插件。 2、job中配置webhook地址和密钥 进入job设置,构建触发器中就可以看到gitlab的webhook配置,复制URL地址和随机令牌至gitlab中 勾选后,就可以展开设置ÿ…...
柔性数组的使用及注意事项
1.柔性数组在结构体当中,并且在结构体的最后面. 2.结构体中除了柔型数组外至少还要有一个其他成员. 3.sizeof()返回结构体的大小不包含柔性数组的大小. 4.malloc 例:struct sdshdr16 *p malloc(sizeof (struct sdshdr16) 32); // 32 为柔性数组的大小 5.free 例: fre…...
数学建模——最优连接(基于最小支撑树)
一、概念 1、图的生成树 由图G(V,E)的生成子图G1(V,E1)(E1是E的子集)是一棵树,则称该树为图G的生成树(支撑树),简称G的树。图G有支撑树的充分必要条件为图G连通。 2、最小生成树问题 连通图G(V,E),每条边…...
【LeetCode】43. 字符串相乘
1 问题 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 “2”, num2 “3” 输出: “…...
车联网之电子围栏模型使用翻滚窗口【二十一】
1. 电子围栏模型使用翻滚窗口 l 创建90秒翻滚窗口,计算中电子围栏信息(ElectricFenceModel中的值根据车辆是否在围栏内进行设置) 设置电子围栏水印 根据vin进行分组 创建翻滚窗口,90秒为一个窗口周期 自定义窗口函数,计算电子围栏中和围栏外车辆信息 1.1 创建90秒翻滚窗口 …...
图形库篇 | EasyX | 基本介绍
图形库篇 | EasyX | 基本介绍 简介 EasyX 是一个针对 C/C 的图形库,可以帮助 C/C 初学者快速上手图形和游戏编程。 比如,可以基于 EasyX 图形库很快的用几何图形画一个房子,或者一辆移动的小车,可以编写俄罗斯方块、贪吃蛇、黑白…...
凉鞋的 Unity 笔记 202. 变量概述与简介
202. 变量概述与简介 想要用好变量不是一件简单的事情,因为变量需要命名。 我们可以从两个角度看待一个变量,第一个角度是变量的功能,第二个是变量的可读性。 变量的功能其实非常简单,变量可以存储一个值,这个值是特…...
基于主动移频法与AFD孤岛检测的单相并网逆变器仿真(Simulink仿真实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
jvm的jshell,学生的工具
jshell 在我眼里,只能作为学校教学的一个玩具,事实上官方也做了解释,以下是官方的解释: 在学习编程语言时,即时反馈很重要,并且 它的 API。学校引用远离Java的首要原因 教学语言是其他语言有一个“REPL”…...
深度解析 Bing 搜索引擎的排名因素与算法
自从和ChatGPT搞上了,Bing在搜索引擎界就像是新晋的网红,风头一时无两。 搜索引擎的排名算法是确定搜索结果排名的核心,每个搜索引擎都有其独特的排名规则和算法。Bing作为全球第二大搜索引擎,其排名因素和算法同样至关重要。在本…...
使用自定义 PyTorch 运算符优化深度学习数据输入管道
在这篇文章[1]中,我们讨论 PyTorch 对创建自定义运算符的支持,并演示它如何帮助我们解决数据输入管道的性能瓶颈、加速深度学习工作负载并降低训练成本。 构建 PyTorch 扩展 PyTorch 提供了多种创建自定义操作的方法,包括使用自定义模块和/或…...
瑞芯微RKNN开发·yolov5
官方预训练模型转换 下载yolov5-v6.0分支源码解压到本地,并配置基础运行环境。下载官方预训练模型 yolov5n.ptyolov5s.ptyolov5m.pt… 进入yolov5-6.0目录下,新建文件夹weights,并将步骤2中下载的权重文件放进去。修改models/yolo.py文件 …...
Flutter之Widget生命周期
目录 初始化构造函数initStatedidChangeDependencies 运行时builddidUpdateWidget 组件移除deactivatedisposereassemble 函数生命周期说明:实际场景App生命周期 前言:生命周期是一个组件加载到卸载的整个周期,熟悉生命周期可以让我们在合适的…...
机器学习tip:sklearn中的pipeline
文章目录 1 加载数据集2 构思算法的流程3 Pipeline执行流程的分析ReferenceStatement 一个典型的机器学习构建包含若干个过程 源数据ETL数据预处理特征选取模型训练与验证 一个典型的机器学习构建包含若干个过程 以上四个步骤可以抽象为一个包括多个步骤的流水线式工作&…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
