链路追踪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博客 以下为盒子…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
