链路追踪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% 的请求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/954412.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core - 配置系统之自定义配置提供程序

ASP.NET Core - 配置系统之自定义配置提供程序 4. 自定义配置提供程序IConfigurationSourceIConfigurationProvider 4. 自定义配置提供程序 在 .NET Core 配置系统中封装一个配置提供程序关键在于提供相应的 IconfigurationSource 实现和 IConfigurationProvider 接口实现&…

MPLS原理及配置

赶时间可以只看实验部分 由来&#xff1a;90年代中期&#xff0c;互联网流量的快速增长。传统IP报文依赖路由器查询路由表转发&#xff0c;但由于硬件技术存在限制导致转发性能低&#xff0c;查表转发成为了网络数据转发的瓶颈。 因此&#xff0c;旨在提高路由器转发速度的MPL…

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【327-337】

327. 断点调试&#xff08;Debug&#xff09; 一个实际需求 在开发中&#xff0c;程序员在查找错误时&#xff0c;可用断点模式在断点调试过程中&#xff0c;是运行状态&#xff0c;是以对象的运行类型来执行的。 A extends B; B b new A(); b.xx();//按照运行类型来执行的 …

Qt 各版本选择

嵌入式推荐用 Qt4.8&#xff0c;打包的程序小&#xff1a;Qt4.8.7是Qt4的终结版本&#xff0c;是Qt4系列版本中最稳定最经典的 最后支持xp系统的长期支持版本&#xff1a;Qt5.6.3&#xff1b;Qt5.7.0是最后支持xp系统的非长期支持版本。 最后提供mysql数据库插件的版本&#xf…

常见好用的PHP CMS开源系统有哪些?

开源的系统&#xff0c;网站大家估计也见过很多&#xff0c;尤其是用PHP写的开源系统也很受用户们欢迎&#xff0c;这类系统通常以简单、使用、开源为优势&#xff0c;为用户提供更好的服务。以下就为大家介绍几个常见且好用的PHP CMS开源系统。欢迎补充&#xff01; 1、WordP…

DuckDB:精通Insert语句处理数据冲突

本文介绍DuckDB insert语句用法&#xff0c;包括常规的批量插入&#xff0c;尤其是插入数据冲突的处理&#xff0c;最后还提及returning子句的用法&#xff0c;每个用法提供示例说明。 insert插入数据 INSERT INTO向表中插入新行。可以插入由值表达式指定的一行或多行&#xf…

【spring mvc】文件上传、下载

文件上传&#xff0c;存储至本地目录中 一、代码1、工具类&#xff08;敏感后缀过滤&#xff09;2、文件上传&#xff0c;存储至本地3、文件下载 二、效果演示1、上传1.1、postMan 请求1.2、上传效果 2、下载2.1、下载效果 一、代码 1、工具类&#xff08;敏感后缀过滤&#x…

Ansible实战:如何正确选择 command 和shell模块?

在使用Ansible进行自动化运维时&#xff0c;command 和 shell 模块是我们执行命令的好帮手。虽然它们看起来很相似&#xff0c;但在功能特性和适用场景上其实有着明显的不同。正确选择合适的模块不仅能够提高任务的效率&#xff0c;还能帮助我们规避一些潜在的风险。在这篇文章…

手撕Transformer -- Day7 -- Decoder

手撕Transformer – Day7 – Decoder Transformer 网络结构图 目录 手撕Transformer -- Day7 -- DecoderTransformer 网络结构图Decoder 代码Part1 库函数Part2 实现一个解码器Decoder&#xff0c;作为一个类Part3 测试 参考 Transformer 网络结构 Decoder 代码 Part1 库函数…

UI自动化测试:异常截图和page_source

自动化测试过程中&#xff0c;是否遇到过脚本执行中途出错却不知道原因的情况&#xff1f;测试人员面临的不仅是问题的复现&#xff0c;还有对错误的快速定位和分析。而异常截图与页面源码&#xff08;Page Source&#xff09;的结合&#xff0c;正是解决这一难题的利器。 在实…

Unity-Mirror网络框架-从入门到精通之RigidbodyBenchmark示例

文章目录 前言示例代码逻辑测试结论性能影响因素最后前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mirror网络框架的深入了解,涵盖从基础到高级的多个主题。Mirror是一个用于Unity的开源网络框架,专为多人游戏开发设计,它…

【Unity3D】【已解决】TextMeshPro无法显示中文的解决方法

TextMeshPro无法显示中文的解决方法 现象解决方法Assets 目录中新建一个字体文件夹在C:\Windows\Fonts 中随便找一个中文字体的字体文件把字体文件拖到第一步创建的文件夹中右键导入的字体&#xff0c;Create---TextMeshPro---Font Asset&#xff0c;创建字体文件资源把 SDF文件…

走出实验室的人形机器人,将复刻ChatGPT之路?

1月7日&#xff0c;在2025年CES电子展现场&#xff0c;黄仁勋不仅展示了他全新的皮衣和采用Blackwell架构的RTX 50系列显卡&#xff0c;更进一步展现了他对于机器人技术领域&#xff0c;特别是人形机器人和通用机器人技术的笃信。黄仁勋认为机器人即将迎来ChatGPT般的突破&…

Docker PG流复制搭建实操

目录标题 制作镜像1. 删除旧的容器2. 创建并配置容器3. 初始化数据库并启动 主库配置参数4. 配置主库5. 修改 postgresql.conf 配置 备库配置参数6. 创建并配置备库容器7. 初始化备库 流复制8. 配置&检查主库复制状态9. 检查备库配置 优化建议问题1&#xff1a;FATAL: usin…

【Flink】Flink内存管理

Flink内存整体结构图&#xff1a; JobManager内存管理 JVM 进程总内存(Total Process Memory)Flink总内存(Total Flink Memory)&#xff1a;JVM进程总内存减去JVM Metaspace(元空间)和JVM Overhead(运行时开销)上图解释&#xff1a; JVM进程总内存为2G;JVM运行时开销(JVM Overh…

Flink系统知识讲解之:Flink内存管理详解

Flink系统知识讲解之&#xff1a;Flink内存管理详解 在现阶段&#xff0c;大部分开源的大数据计算引擎都是用Java或者是基于JVM的编程语言实现的&#xff0c;如Apache Hadoop、Apache Spark、Apache Drill、Apache Flink等。Java语言的好处是不用考虑底层&#xff0c;降低了程…

VM(虚拟机)和Linux的安装

文章目录 1.虚拟机1.1 VM的安装和删除1.1.1 安装前提1.1.2 安装步骤 1.2 虚拟机快照1.3 虚拟机的克隆 2.Linux的安装2.1 CentOS2.2 Ubuntu 1.虚拟机 &#xff08;1&#xff09;Linux系统的安装方式 ①物理机安装&#xff1a;直接将操作系统安装到服务器硬件上 ②虚拟机安装&am…

Unity中实现倒计时结束后干一些事情

问题描述&#xff1a;如果我们想实现在一个倒计时结束后可以执行某个方法&#xff0c;比如挑战成功或者挑战失败&#xff0c;或者其他什么的比如生成boss之类的功能&#xff0c;而且你又不想每次都把代码复制一遍&#xff0c;那么就可以用下面这种方法。 结构 实现步骤 创建一…

citrix netscaler13.1 重写负载均衡响应头(基础版)

在 Citrix NetScaler 13.1 中&#xff0c;Rewrite Actions 用于对负载均衡响应进行修改&#xff0c;包括替换、删除和插入 HTTP 响应头。这些操作可以通过自定义策略来完成&#xff0c;帮助你根据需求调整请求内容。以下是三种常见的操作&#xff1a; 1. Replace (替换响应头)…

新垂直电商的社交传播策略与AI智能名片2+1链动模式S2B2C商城小程序的应用探索

摘要&#xff1a;随着互联网技术的不断进步和电商行业的快速发展&#xff0c;传统电商模式已难以满足消费者日益增长的个性化和多元化需求。新垂直电商在此背景下应运而生&#xff0c;通过精准定位、用户细分以及深度社交传播策略&#xff0c;实现了用户群体的快速裂变与高效营…