当前位置: 首页 > 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博客 以下为盒子…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

Kafka入门-生产者

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

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...