链路追踪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博客 以下为盒子…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
