当前位置: 首页 > news >正文

链路追踪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使用&#xff0…...

Uniapp判断设备是安卓还是 iOS,并调用不同的方法

在 UniApp 中&#xff0c;可以通过 uni.getSystemInfoSync() 方法来获取设备信息&#xff0c;然后根据系统类型判断当前设备是安卓还是 iOS&#xff0c;并调用不同的方法。 示例代码 export default {onLoad() {this.checkPlatform();},methods: {checkPlatform() {// 获取系…...

计算机网络 (42)远程终端协议TELNET

前言 Telnet&#xff08;Telecommunication Network Protocol&#xff09;是一种网络协议&#xff0c;属于TCP/IP协议族&#xff0c;主要用于提供远程登录服务。 一、概述 Telnet协议是一种远程终端协议&#xff0c;它允许用户通过终端仿真器连接到远程主机&#xff0c;并在远程…...

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 环形块状缓冲区简称为&#xff1a;rbb。与传统的环形缓冲区不同的是&…...

HunyuanVideo 文生视频模型实践

HunyuanVideo 文生视频模型实践 flyfish 运行 HunyuanVideo 模型使用文本生成视频的推荐配置&#xff08;batch size 1&#xff09;&#xff1a; 模型分辨率(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文档管理

背景&#xff1a;使用PyCharmgit做文档管理 需求&#xff1a;需要PyCharm自动识别docx/xslx/vsdx等文件类型&#xff0c;并在PyCharm内点击文档时唤起系统内关联应用(如word、excel、visio) 设置步骤&#xff1a; 1、file -》 settings -》file types 2、在Files opened i…...

QNAP 上常用的几款软件

当我们谈到 NAS&#xff08;Network Attached Storage&#xff09;时&#xff0c;QNAP 凭借多年的产品迭代、稳定的硬件性能和不断丰富的软件生态&#xff0c;已成为很多家庭及中小型企业的首选。除了存储本身&#xff0c;QNAP 提供的各种官方软件和应用&#xff0c;也为用户带…...

LabVIEW智能水肥一体灌溉控制系统

本文详细介绍了一种基于LabVIEW的智能水肥一体灌溉控制系统的设计与实现。该系统采用模糊控制策略&#xff0c;能够自动调节土壤湿度和肥液浓度&#xff0c;满足不同作物在不同生长阶段的需求&#xff0c;有效提高水肥利用效率&#xff0c;对现代精准农业具有重要的实践和推广价…...

提问:玩游戏输入法总弹出来咋回事哎

玩游戏时输入法总弹出来的问题&#xff0c;通常与电脑的输入法设置、操作系统配置以及游戏程序的兼容性有关。以下是一些常见的解决方法&#xff1a; 一、修改输入法快捷键 禁用不必要的输入法&#xff1a; 在系统的语言设置中&#xff0c;暂时禁用非活动的输入法&#xff0c;…...

链家房价数据爬虫和机器学习数据可视化预测

完整源码项目包获取→点击文章末尾名片&#xff01;...

【微服务】面试题 5、分布式系统理论:CAP 与 BASE 详解

分布式系统理论&#xff1a;CAP 与 BASE 详解 一、CAP 定理 背景与定义&#xff1a;1998 年由加州大学科学家埃里克布鲁尔提出&#xff0c;分布式系统存在一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;、分区容错性&#xff08;Part…...

第十二章:算法与程序设计

文章目录&#xff1a; 一&#xff1a;基本概念 1.算法与程序 1.1 算法 1.2 程序 2.编译预处理 3.面向对象技术 4.程序设计方法 5.SOP标志作业流程 6.工具 6.1 自然语言 6.2 流程图 6.3 N/S图 6.4 伪代码 6.5 计算机语言 二&#xff1a;程序设计 基础 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&#xff08;检出&#xff09;到 Pycharm中 2、推送…...

信息安全、网络安全和数据安全的区别和联系

信息安全、网络安全和数据安全是信息安全领域的三大支柱&#xff0c;它们之间既存在区别又相互联系。以下是对这三者的详细比较&#xff1a; 一.区别 1.信息安全 定义 信息安全是指为数据处理系统建立和采用的技术和管理的安全保护&#xff0c;保护计算机硬件、软件和数据不…...

C++实现设计模式---抽象工厂模式 (Abstract Factory)

抽象工厂模式 (Abstract Factory) 抽象工厂模式 是一种创建型设计模式&#xff0c;提供一个接口&#xff0c;用于创建一组相关或互相依赖的对象&#xff0c;而无需指定它们的具体类。 意图 提供一个创建一组相关对象的接口&#xff0c;而无需指定它们的具体类。解决产品对象之…...

K8S开启/关闭审计日志

K8S默认禁用审计 开启/关闭 k8s 审计日志 默认 Kubernetes 集群不会输出审计日志信息。通过以下配置&#xff0c;可以开启 Kubernetes 的审计日志功能。 准备审计日志的 Policy 文件配置 API 服务器&#xff0c;开启审计日志重启并验证 准备审计日志 Policy 文件 apiVersio…...

css盒子水平垂直居中

目录 1采用flex弹性布局&#xff1a; 2子绝父相margin&#xff1a;负值&#xff1a; 3.子绝父相margin:auto&#xff1a; 4子绝父相transform&#xff1a; 5通过伪元素 6table布局 7grid弹性布局 文字 水平垂直居中链接&#xff1a;文字水平垂直居中-CSDN博客 以下为盒子…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...