Spring Cloud 服务追踪实战:使用 Zipkin 构建分布式链路追踪

在分布式微服务架构中,一个用户请求往往需要经过多个服务协作完成,如果出现性能瓶颈或异常,排查会非常困难。此时,分布式链路追踪(Distributed Tracing)技术就显得尤为重要。本文将带你一步步搭建基于 Zipkin 的服务追踪系统,帮助你更好地监控和分析微服务调用链路。

什么是 Zipkin

Zipkin 是一款开源的分布式追踪系统,最初由 Twitter 开发,用于收集各个服务之间请求的时序数据,分析请求的延迟、瓶颈和错误。

通过 Zipkin,我们可以直观地看到请求如何在微服务之间传播,帮助开发者快速定位性能瓶颈,优化系统架构。

下载并启动 Zipkin

首先,需要下载并启动 Zipkin Server。可以直接通过以下链接下载可执行 jar 包:

https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec

下载完成后,使用命令行(CMD)执行以下命令启动 Zipkin:

java -jar zipkin-server-<version>-exec.jar

其中,<version> 替换为实际下载的版本号。

image-20250629164505575

默认情况下,Zipkin 会启动在 http://localhost:9411/。启动成功后,你可以在浏览器中访问该地址查看 Zipkin 的可视化界面。

image-20250629164535903

集成 Zipkin 到 Spring Boot 微服务

添加依赖

在你的微服务项目 pom.xml 中添加以下依赖:

<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>

如果你使用的是 Spring Cloud Alibaba,还需添加对应的版本管理依赖(spring-cloud-dependencies)。

配置 application.yml

src/main/resources/application.yml 中配置 Zipkin:

server:port: 8181
spring:zipkin:base-url: http://localhost:9411sleuth:sampler:# 设置采样率,默认 0.1(10%),这里配置为 1.0 表示 100% 请求都会被追踪probability: 1.0application:name: zipkin

sleuth.sampler.probability 表示请求采样率。如果只想采集部分请求,可以将其设置为 0.1 或其他小于 1 的值。

编写示例接口

例如,在 Controller 中新增一个接口,方便测试链路追踪:

@RestController
@RequestMapping("/trace")
public class TraceController {@GetMapping("/test")public String testTrace() {return "Hello Zipkin!";}
}

启动服务

启动应用后,访问地址:http://localhost:8181/trace/test

然后进入 Zipkin 控制台:http://localhost:9411/ ,点击 Find Traces,即可看到刚刚访问的请求链路信息,点击可以查看详细的调用过程、耗时等信息。

链路追踪界面解读

进入 Zipkin Web UI 后,可以看到以下核心功能:

  • Service:显示所有注册过的服务
  • Dependencies:展示服务之间的调用依赖关系
  • Trace details:展示具体请求的时间线(调用树状结构),包含每个服务的耗时

通过这些信息,可以清晰了解每个请求的流转路径,定位哪个服务处理最慢,或者哪些调用链存在异常。

总结

使用 Zipkin 结合 Spring Cloud Sleuth,可以轻松实现微服务的全链路追踪,极大提升系统可观测性和问题排查效率。特别是在微服务体系下,当面对复杂调用链和高并发请求时,这种能力显得尤为重要。

延伸阅读

  • Spring Cloud Sleuth 官方文档:https://spring.io/projects/spring-cloud-sleuth
  • Zipkin 官方文档:https://zipkin.io/

如果这篇文章对你有帮助,欢迎收藏、点赞或关注,后续会持续分享更多 Spring Cloud 实践与微服务架构相关内容。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux云计算基础篇(6)

一、IO重定向和管道 stdin&#xff1a;standard input 标准输入 stdout&#xff1a;standard output 标准输出 stderr&#xff1a; standard error 标准错误输出 举例 find /etc/ -name passwd > find.out 将正确的输出重定向在这个find.ou…

Python将COCO格式分割标签绘制到对应的图片上

Python将COCO格式分割标签绘制到对应的图片上 前言前提条件相关介绍COCO 格式简介&#xff08;实例分割&#xff09;&#x1f4c1; 主要目录结构&#xff1a;&#x1f4c4; JSON 标注文件结构示例&#xff1a;✅ 特点&#xff1a; 实验环境Python将COCO格式分割标签绘制到对应的…

光纤(FC)交换机与以太网(网络)交换机的区别

光纤通道交换机&#xff08;FC交换机&#xff09;与普通以太网交换机&#xff08;网络交换机&#xff09;在用途、协议、性能、可靠性等方面存在显著差异&#xff0c;主要区别如下&#xff1a; 1. 用途与网络类型 FC交换机 主要用于存储区域网络&#xff08;SAN&#xff09;&a…

电磁场有限元方法EX2.2-里兹法求解泊松方程控制的边值问题

电磁场有限元方法EX2.2-里兹法求解泊松方程控制的边值问题 简单学习一下有限元法的基础理论&#xff0c;书本为电磁场有限元经典教材&#xff1a; THE FINITE ELEMENT METHOD IN ELECTROMAGNETICS, JIAN-MING JIN 目录 电磁场有限元方法EX2.2-里兹法求解泊松方程控制的边值问…

云端备份与恢复策略:企业如何选择最安全的备份解决方案

更多云服务器知识&#xff0c;尽在hostol.com 想象一下&#xff0c;某个凌晨&#xff0c;你突然发现公司所有重要数据都被加密&#xff0c;系统崩溃&#xff0c;业务停摆。有人给你打来电话说&#xff1a;“一切都被勒索了&#xff0c;恢复费用可能需要几百万。”这时&#xf…

OSPF高级特性之FRR

一、概述 众所周知,IGP当中链路状态路由协议(OSPF、ISIS)之所以可以代替我们的矢量路由协议(RIP),就是因为链路状态路由协议可以根据某些特性快速的感知到路由的变化从而改变路径。 前面我们已经介绍过了OSPF的其中一个快速收敛的机制,SPF算法,本章节将介绍另一个快速收敛机制,…

多元化国产主板,满足更高性能、更高安全的金融发展

在金融行业数字化转型的浪潮中&#xff0c;对于核心硬件的性能与安全需求达到了前所未有的高度。国产主板应运而生&#xff0c;凭借其卓越的多元化特性&#xff0c;为金融领域带来了高性能运算与高安全防护的双重保障&#xff0c;成为推动金融行业发展的关键力量。以高能计算机…

数据库分布式架构:ShardingSphere 实践

一、数据库分布式架构概述 1.1 分布式架构概念 在当今数字化时代&#xff0c;随着业务的不断拓展和数据量的爆炸式增长&#xff0c;传统的单机数据库架构逐渐暴露出诸多局限性。例如&#xff0c;在电商大促期间&#xff0c;海量的订单数据和用户访问请求会让单机数据库不堪重…

【WRFDA教程第二期】运行WRFDA 3DVAR/4DVAR数据同化

目录 一、准备阶段&#xff1a;下载并解压测试数据二、运行 3DVAR 教学实验日志分析&#xff08;wrfda.log&#xff09;进阶实验建议&#xff1a;对比不同设置的影响输出文件说明 三、运行 4DVAR 教学实验步骤1&#xff1a;准备工作目录与环境变量步骤2&#xff1a;链接可执行文…

redis缓存三大问题分析与解决方案

什么是缓存&#xff1f; 缓存&#xff08;Cache&#xff09;是一种将热点数据缓存在内存中&#xff08;如 Redis&#xff09;以加快访问速度、减轻数据库压力的技术。 但引入缓存后可能出现 三大核心问题&#xff1a; 缓存穿透&#xff08;Cache Penetration&#xff09;缓存…

李宏毅机器学习笔记——梯度下降法

深度学习介绍 基于仿生学的一种自成体系的机器学习算法&#xff0c;包括但不限于图像识别、语音、文本领域。 梯度下降法 作为深度学习算法种常用的优化算法 梯度下降法&#xff0c;是一种基于搜索的最优化方法&#xff0c;最用是最小化一个损失函数。梯度下降是迭代法的一…

day50/60

浙大疏锦行 DAY 50 预训练模型CBAM模块 知识点回顾&#xff1a; resnet结构解析CBAM放置位置的思考针对预训练模型的训练策略 差异化学习率三阶段微调 ps&#xff1a;今日的代码训练时长较长&#xff0c;3080ti大概需要40min的训练时长 作业&#xff1a; 好好理解下resnet18的…

Vue3 之vite.config.js配置

一、示例 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path // https://vitejs.dev/config/ export default defineConfig({plugins: [vue()],base: ./,build: {assetsDir: static, //指定静态资源目录rollupOptions: {input: {mai…

利用Gpu训练

方法一&#xff1a; 分别对网络模型&#xff0c;数据&#xff08;输入&#xff0c;标注&#xff09;&#xff0c;损失函数调用.cuda() 网络模型&#xff1a; if torch.cuda.is_available():netnet.cuda() 数据&#xff08;训练和测试&#xff09;&#xff1a; if torch.cud…

使用excel中的MATCH函数进行匹配数据

一、背景 在平日处理数据时&#xff0c;经常需要将给定数据按照制定的数据进行排序&#xff0c;数量比较大时&#xff0c;逐个处理有点费事费力且容易出错&#xff0c;这时可借助excel表格中match函数进行精确匹配。 二、使用match函数–精确排序操作步骤 主要工作步骤&#xf…

SpringCloud系列(41)--SpringCloud Config分布式配置中心简介

前言&#xff1a;微服务意味着要将单体应用中的业务拆分成一个个子服务&#xff0c;每个服务的粒度相对较小&#xff0c;因此系统中会出现大量的服务&#xff0c;但由于每个服务都需要必要的配置信息才能运行&#xff0c;所以—套集中式的、动态的配置管理设施是必不可少的&…

wireshark介绍和使用

Wireshark 介绍 Wireshark 是一款开源的 网络协议分析工具&#xff08;Packet Sniffer&#xff09;&#xff0c;用于捕获和分析网络数据包。它支持多种协议解析&#xff0c;适用于网络调试、安全分析、网络教学等场景。 官网&#xff1a;https://www.wireshark.org/ 特点&#…

【甲方安全建设】敏感数据检测工具 Earlybird 安装使用详细教程

文章目录 背景工具介绍安装方法一、Linux 与 macOS 安装流程二、Windows 系统安装流程(一)三、Windows 系统安装流程(二)四、错误处理使用说明模块与规则机制集成与运维建议结语背景 随着源代码泄露、配置误提交、密码硬编码等风险频发,企业源代码库中潜在的敏感信息泄漏…

异步Websocket构建聊天室

目录 Websocket技术背景 Websockec简介 实现websocket通信程序 实验环境&#xff1a; 服务端&#xff08;阿里云ESC,VPC网络&#xff09;&#xff1a; 客户端1&#xff08;本机&#xff09;&#xff1a; 通信模型&#xff1a; 实现功能逻辑&#xff1a; 源代码&#xff1a; 服务…

OpenCV CUDA模块设备层-----反向二值化阈值处理函数thresh_binary_inv_func()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 OpenCV CUDA 模块&#xff08;cudev&#xff09; 中的一个仿函数&#xff08;functor&#xff09;生成器&#xff0c;用于创建一个反向二值化阈值…