链路追踪SkyWalking
链路追踪
- 链路追踪作用
- 链路追踪的关键概念
- 链路追踪的工作原理
- 常用链路追踪工具
- 链路追踪的实现步骤
- 链路追踪的典型场景
- SkyWalking
- SkyWalking 的主要功能
- SkyWalking 的架构
- 安装 SkyWalking
- 从 SkyWalking 的官方 GitHub 仓库 下载最新版本。
- 配置后端存储
- SkyWalking使用,访问界面
- 集成 SkyWalking
- 高级功能配置
- 配置日志追踪:
- 动态配置
- 常见问题
- 数据未显示
- 性能影响
链路追踪(Distributed Tracing) 是分布式系统中用于跟踪请求在多个服务间的调用过程的一种技术。它可以帮助开发者和运维人员全面了解请求的流转路径,定位性能瓶颈,诊断错误,优化系统性能。
链路追踪作用
在微服务架构中,请求通常会经过多个服务协作处理,可能涉及以下复杂性:
- 服务间调用复杂:单个请求会调用多个服务,难以掌握全貌。
- 调试困难:当出现问题时,难以定位是哪个服务或调用链出现了问题。
- 性能瓶颈难以识别:无法直观地了解哪个服务或哪段调用链消耗了过多时间。
- 日志分散:各服务的日志分布在不同的节点,难以整合分析。
链路追踪通过可视化请求的调用路径,解决了这些问题。
链路追踪的关键概念
Trace(追踪)
- 描述一个完整请求的调用链路,从起点到终点的所有过程。
Span(跨度)
- 一个请求生命周期中某个具体步骤的操作,例如调用某个服务或数据库查询。
- 每个 Span 包含开始时间、持续时间、操作名称、标签等。
Parent-Child 关系
- 在一个 Trace 中,多个 Span 可能有父子关系,形成一个树形结构。例如:
用户请求 -> API 网关(Span A) -> 服务 B(Span B,子节点) -> 服务 C(Span C,子节点)。
上下文传递(Context Propagation)
- 为了将 Trace 信息传递到所有服务,链路追踪会通过请求头(如 HTTP Headers)传递追踪上下文(Trace ID 和 Span ID)。
链路追踪的工作原理
生成 Trace ID
- 请求进入系统时,追踪工具会生成一个全局唯一的 Trace ID,用于标识该请求的完整链路。
创建 Span
- 每个服务接收到请求后,会创建一个 Span,记录当前服务的操作。
- Span 与其 Parent Span 通过 Span ID 建立父子关系。
上下文传递
- Trace ID 和 Span ID 会通过 HTTP 请求头或消息队列的元数据在服务间传递。
数据收集与存储
- 每个服务将 Span 数据发送到追踪系统(如 Jaeger 或 Zipkin),并存储在集中式数据库中。
可视化与分析
- 追踪系统会将收集到的 Trace 数据以时间线或拓扑图的形式展示出来,便于分析。
常用链路追踪工具
Jaeger:
- 由 Uber 开发的开源分布式追踪系统,支持完整的 Trace 和 Span 分析。
- 提供高效的查询功能和性能监控。
Zipkin
- Twitter 开发的开源工具,功能类似 Jaeger,轻量级,适合小型系统。
OpenTelemetry
- 一个标准化的开源框架,用于采集、处理和导出链路追踪数据。
- 兼容 Jaeger、Zipkin 和其他可观测性工具。
SkyWalking
- 面向微服务的分布式追踪工具,集成了链路追踪、性能分析和可观测性功能。
链路追踪的实现步骤
- 集成追踪工具库:在每个服务中引入追踪工具的 SDK,如 OpenTelemetry、Jaeger 客户端等。
- 注入 Trace 上下文:确保 Trace ID 和 Span ID 能通过 HTTP Headers 或消息队列传递到下游服务。
- 配置采样策略:设置采样率,控制需要追踪的请求比例,避免高流量下数据量过大。
- 数据导出与存储:将追踪数据发送到追踪系统的后端(如 Jaeger、Elasticsearch)。
- 分析与优化:在追踪系统的界面中查看请求的调用链,分析性能瓶颈和错误位置。
链路追踪的典型场景
- 故障定位:追踪工具可以快速定位请求失败的服务或方法。
- 性能优化:找出请求中耗时最长的服务或操作,并进行优化。
- 调用依赖分析:直观地查看服务之间的依赖关系,优化服务拓扑。
- 蓝绿发布和金丝雀测试:通过追踪请求流量,验证新版本服务是否正常。
示例:HTTP 链路追踪
请求从客户端到多个服务的链路追踪示例:
Trace ID: 123456789
Span 1: API Gateway (GET /orders)Span 2: Order Service (DB Query)Span 3: Payment Service (HTTP Call)
- API Gateway 花费 100ms,调用 Order Service。
- Order Service 花费 50ms 查询数据库。
- Payment Service 花费 70ms 调用支付网关。
数据库查询时间较短,问题可能在 Payment Service 的外部调用。
SkyWalking
SkyWalking 是一款强大的开源分布式追踪和应用性能监控(APM)工具,支持链路追踪、性能分析和服务依赖拓扑展示。
SkyWalking 的主要功能
- 分布式链路追踪:查看跨服务请求的调用链路。
- 服务性能监控:监控服务的响应时间、错误率和吞吐量。
- 服务拓扑分析:可视化展示服务之间的依赖关系。
- 告警与诊断:支持基于性能指标的告警和问题诊断。
SkyWalking 的架构
- Agent:运行在服务中的探针,采集链路追踪和性能数据。
- Collector:后端组件,负责接收、处理和存储数据。
- Storage:存储组件,常用 Elasticsearch 或 H2 数据库。
- UI:前端界面,用于展示监控和追踪数据。
安装 SkyWalking
从 SkyWalking 的官方 GitHub 仓库 下载最新版本。
wget https://downloads.apache.org/skywalking/8.x/skywalking-x.x.x.tar.gz
tar -xvzf skywalking-x.x.x.tar.gz
cd skywalking
配置后端存储
SkyWalking 支持多种存储后端(如 Elasticsearch、H2、MySQL)。以下是配置 Elasticsearch 的示例:
在 config/application.yml 文件中配置存储:
storage:selector: ${SW_STORAGE:elasticsearch}elasticsearch:namespace: ${SW_NAMESPACE:""}clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
确保 Elasticsearch 已正确安装并运行。
启动 SkyWalking
bin/startup.sh
SkyWalking使用,访问界面
- SkyWalking 后端运行在 http://localhost:12800。
- UI 界面运行在 http://localhost:8080。
集成 SkyWalking
SkyWalking 通过 Agent(探针)与应用服务集成,支持多种语言(Java、Go、Python 等)。以下以 Java 应用为例。
1:下载 Agent:Agent 位于 SkyWalking 包的 agent 目录下。
2:启动 Java 应用时加载 Agent
在启动命令中添加以下参数:
-javaagent:/path-to-skywalking/agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=<service-name> \
-Dskywalking.collector.backend_service=<collector-host>:11800
- skywalking.agent.service_name:指定服务的名称(如 order-service)。
- skywalking.collector.backend_service:指定 SkyWalking Collector 地址(如 localhost:11800)。
3:启动 Spring Boot 应用时:
java -javaagent:/opt/skywalking/agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=order-service \
-Dskywalking.collector.backend_service=localhost:11800 \
-jar order-service.jar
高级功能配置
配置日志追踪:
通过 SkyWalking 和日志框架(如 Logback、Log4j2)的集成,可以在链路追踪中关联日志信息。
- 在日志配置文件中添加 SkyWalking 的 MDC(Mapped Diagnostic Context)。
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>[%X{traceId}] [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender>
动态配置
通过 SkyWalking 的动态配置功能(Dynamic Configuration),可以实时更新采样率、告警规则等参数,无需重启服务。
常见问题
数据未显示
- 确保 Agent 正确加载,检查启动日志是否包含 skywalking-agent.jar。
- 确认服务的 collector.backend_service 地址正确。
- 检查 SkyWalking 后端是否连接到存储(如 Elasticsearch)。
性能影响
SkyWalking 默认采样所有请求。在高流量环境中,可通过动态配置降低采样率:
agent:sampleRate: 0.1 # 只采样 10% 的请求
相关文章:
链路追踪SkyWalking
链路追踪 链路追踪作用链路追踪的关键概念链路追踪的工作原理常用链路追踪工具链路追踪的实现步骤链路追踪的典型场景 SkyWalkingSkyWalking 的主要功能SkyWalking 的架构安装 SkyWalking从 SkyWalking 的官方 GitHub 仓库 下载最新版本。配置后端存储SkyWalking使用࿰…...
Uniapp判断设备是安卓还是 iOS,并调用不同的方法
在 UniApp 中,可以通过 uni.getSystemInfoSync() 方法来获取设备信息,然后根据系统类型判断当前设备是安卓还是 iOS,并调用不同的方法。 示例代码 export default {onLoad() {this.checkPlatform();},methods: {checkPlatform() {// 获取系…...
计算机网络 (42)远程终端协议TELNET
前言 Telnet(Telecommunication Network Protocol)是一种网络协议,属于TCP/IP协议族,主要用于提供远程登录服务。 一、概述 Telnet协议是一种远程终端协议,它允许用户通过终端仿真器连接到远程主机,并在远程…...
rtthread学习笔记系列-- 23 环形缓冲块 ringblock
文章目录 23 环形缓冲块 ringblock23.1 初始化23.2 PUT & GET 块23.3 块释放23.4 rt_rbb_blk_queue_get23.5 rt_rbb_blk_alloc https://github.com/wdfk-prog/RT-Thread-Study 23 环形缓冲块 ringblock 环形块状缓冲区简称为:rbb。与传统的环形缓冲区不同的是&…...
HunyuanVideo 文生视频模型实践
HunyuanVideo 文生视频模型实践 flyfish 运行 HunyuanVideo 模型使用文本生成视频的推荐配置(batch size 1): 模型分辨率(height/width/frame)峰值显存HunyuanVideo720px1280px129f60GHunyuanVideo544px960px129f45G 本项目适用于使用 N…...
Qt——QTableWidget 限制单元格输入范围的方法(正则表达式输入校验法、自定义代理类MyItemDelegrate)
【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》...
深度学习论文: CAS-ViT: Convolutional Additive Self-attention Vision Transformers
深度学习论文: CAS-ViT: Convolutional Additive Self-attention Vision Transformers for Efficient Mobile Applications CAS-ViT: Convolutional Additive Self-attention Vision Transformers for Efficient Mobile Applications PDF:https://arxiv.org/pdf/2408.03703 PyT…...
PyCharm文档管理
背景:使用PyCharmgit做文档管理 需求:需要PyCharm自动识别docx/xslx/vsdx等文件类型,并在PyCharm内点击文档时唤起系统内关联应用(如word、excel、visio) 设置步骤: 1、file -》 settings -》file types 2、在Files opened i…...
QNAP 上常用的几款软件
当我们谈到 NAS(Network Attached Storage)时,QNAP 凭借多年的产品迭代、稳定的硬件性能和不断丰富的软件生态,已成为很多家庭及中小型企业的首选。除了存储本身,QNAP 提供的各种官方软件和应用,也为用户带…...
LabVIEW智能水肥一体灌溉控制系统
本文详细介绍了一种基于LabVIEW的智能水肥一体灌溉控制系统的设计与实现。该系统采用模糊控制策略,能够自动调节土壤湿度和肥液浓度,满足不同作物在不同生长阶段的需求,有效提高水肥利用效率,对现代精准农业具有重要的实践和推广价…...
提问:玩游戏输入法总弹出来咋回事哎
玩游戏时输入法总弹出来的问题,通常与电脑的输入法设置、操作系统配置以及游戏程序的兼容性有关。以下是一些常见的解决方法: 一、修改输入法快捷键 禁用不必要的输入法: 在系统的语言设置中,暂时禁用非活动的输入法,…...
链家房价数据爬虫和机器学习数据可视化预测
完整源码项目包获取→点击文章末尾名片!...
【微服务】面试题 5、分布式系统理论:CAP 与 BASE 详解
分布式系统理论:CAP 与 BASE 详解 一、CAP 定理 背景与定义:1998 年由加州大学科学家埃里克布鲁尔提出,分布式系统存在一致性(Consistency)、可用性(Availability)、分区容错性(Part…...
第十二章:算法与程序设计
文章目录: 一:基本概念 1.算法与程序 1.1 算法 1.2 程序 2.编译预处理 3.面向对象技术 4.程序设计方法 5.SOP标志作业流程 6.工具 6.1 自然语言 6.2 流程图 6.3 N/S图 6.4 伪代码 6.5 计算机语言 二:程序设计 基础 1.常数 …...
RAG技术:是将知识库的文档和问题共同输入到LLM中
RAG技术 RAG技术是将知识库的文档和问题共同输入到LLM中 RAG技术是先从知识库中检索出与问题相关的文档片段,然后将这些检索到的文档片段与问题一起输入到LLM中进行回答。具体过程如下: 文本分块 由于LLM的上下文窗口有限,需要将长文本资料分割成较小的块,以便LLM能够有…...
持续集成 01|Gitee介绍、Pycharm使用Gitee
目录 一、理论 二、 git的简介与安装 三、Gitee 1、注册网易163邮箱 2、注册Gitee账号 3、git和gitee管理代码工作原理 三、PyCharm安装配置Gitee 四、Pycharm使用Gitee插件的五种场景 1、将 Gitee的新仓库 Checkout(检出)到 Pycharm中 2、推送…...
信息安全、网络安全和数据安全的区别和联系
信息安全、网络安全和数据安全是信息安全领域的三大支柱,它们之间既存在区别又相互联系。以下是对这三者的详细比较: 一.区别 1.信息安全 定义 信息安全是指为数据处理系统建立和采用的技术和管理的安全保护,保护计算机硬件、软件和数据不…...
C++实现设计模式---抽象工厂模式 (Abstract Factory)
抽象工厂模式 (Abstract Factory) 抽象工厂模式 是一种创建型设计模式,提供一个接口,用于创建一组相关或互相依赖的对象,而无需指定它们的具体类。 意图 提供一个创建一组相关对象的接口,而无需指定它们的具体类。解决产品对象之…...
K8S开启/关闭审计日志
K8S默认禁用审计 开启/关闭 k8s 审计日志 默认 Kubernetes 集群不会输出审计日志信息。通过以下配置,可以开启 Kubernetes 的审计日志功能。 准备审计日志的 Policy 文件配置 API 服务器,开启审计日志重启并验证 准备审计日志 Policy 文件 apiVersio…...
css盒子水平垂直居中
目录 1采用flex弹性布局: 2子绝父相margin:负值: 3.子绝父相margin:auto: 4子绝父相transform: 5通过伪元素 6table布局 7grid弹性布局 文字 水平垂直居中链接:文字水平垂直居中-CSDN博客 以下为盒子…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...
Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
