锅总浅析链路追踪技术

链路追踪是什么?常用的链路追踪工具有哪些?它们的异同、架构、工作流程及关键指标有哪些?希望读完本文能帮您解答这些疑惑!

一、链路追踪简介

链路追踪技术(Distributed Tracing)是一种用于监控和分析分布式系统中的请求流的技术。随着微服务架构的广泛应用,单一请求可能会经过多个服务节点,这使得监控和诊断问题变得复杂。链路追踪技术通过记录每个请求在各个服务节点中的详细信息,帮助开发者理解和优化系统性能。以下是链路追踪技术的关键概念和常见工具:

关键概念

  1. Trace(追踪):一个Trace代表一次完整的请求处理过程,从发起请求到最终完成,可能会经过多个服务节点。

  2. Span(跨度):一个Span代表在某个服务节点中对请求的处理过程。一个Trace由多个Span组成。

  3. Span Context(跨度上下文):包含Trace ID和Span ID等信息,用于关联各个Span。

  4. Instrumentation(插桩):在代码中添加钩子,用于记录Trace和Span信息。

常见工具

  1. Zipkin:一个开源的分布式追踪系统,提供收集、存储、查询和可视化Trace数据的功能。支持多种语言的客户端库。

  2. Jaeger:由Uber开源的分布式追踪系统,提供Trace数据的收集、存储和分析功能。与Kubernetes和Prometheus等工具集成良好。

  3. SkyWalking:一个开源的应用性能监控(APM)和分布式追踪系统,设计用于监控和诊断微服务、云原生和容器化架构的应用。提供详细的链路追踪、性能监控、服务依赖分析等功能,支持多种语言和框架。

  4. OpenTelemetry:一个统一的标准和工具集,用于收集分布式系统的度量数据、日志和追踪信息。它是OpenTracing和OpenCensus的合并项目,支持多种语言和后端。

  5. Elastic APM:Elastic公司提供的应用性能监控解决方案,集成了链路追踪功能,可以与Elasticsearch和Kibana配合使用,提供强大的数据分析和可视化能力。

工作原理

  1. 数据采集:通过在代码中插入追踪代码或使用自动化工具,收集请求的Trace和Span数据。

  2. 数据传输:将采集到的数据发送到集中式的追踪系统(如Zipkin、Jaeger或SkyWalking)。

  3. 数据存储:追踪系统会将接收到的Trace和Span数据存储在数据库中,通常是高性能的NoSQL数据库。

  4. 数据分析和可视化:使用追踪系统的界面或集成的可视化工具,分析和展示Trace数据,帮助识别性能瓶颈和故障点。

应用场景

  • 性能优化:通过分析Trace数据,识别系统中的性能瓶颈,并进行相应的优化。
  • 故障排查:快速定位请求失败的服务节点,缩短故障排查时间。
  • 依赖关系分析:了解服务之间的调用关系,优化服务依赖结构。
  • SLA监控:监控各个服务的响应时间和可用性,确保满足服务级别协议(SLA)的要求。

实践建议

  • 全面覆盖:确保所有关键路径和服务都被追踪,避免遗漏关键的Trace数据。
  • 性能开销:注意追踪代码对系统性能的影响,合理设置采样率,避免过多的数据收集导致系统负担。
  • 安全和隐私:在追踪数据中避免收集敏感信息,确保数据传输和存储的安全性。

链路追踪技术是微服务架构中非常重要的监控手段,通过详细的请求流分析,帮助开发者更好地理解系统运行状态,优化性能,快速定位和解决问题。SkyWalking作为一种强大的链路追踪工具,提供了全面的监控和分析能力,是现代分布式系统中不可或缺的一部分。

二、常见链路追踪工具对比分析

对于常见的分布式追踪工具(Zipkin、Jaeger、SkyWalking、OpenTelemetry和Elastic APM),它们在应用场景和性能方面有一些差异。下面是它们的对比分析:

工具主要应用场景性能特点支持语言和框架开源状态
Zipkin- 性能优化和故障排查- 轻量级,适合初学者和小规模部署Java、Go、Python、Ruby、Node.js 等
Jaeger- 微服务架构监控和性能优化- 高度可扩展,支持大规模部署,性能良好Java、Go、Python、Node.js 等
SkyWalking- 微服务和云原生环境下的应用性能监控和优化- 支持分布式链路追踪、性能指标监控、服务依赖分析Java、Go、Node.js、Python、PHP、.NET 等
OpenTelemetry- 跨语言和跨平台的应用监控和追踪- 标准化的API和数据格式,支持多语言,集成度高支持多种主流编程语言和框架
Elastic APM- Elasticsearch 和 Kibana 集成的应用性能监控- 强大的数据分析和可视化能力,适合与Elastic Stack集成进行全面监控Java、Go、Python、Node.js 等

分析说明:

  1. 主要应用场景

    • ZipkinJaeger 主要用于性能优化和故障排查,适合于需要快速定位和解决问题的场景。
    • SkyWalking 专注于微服务和云原生环境下的应用性能监控和优化,提供了详细的链路追踪和服务依赖分析。
    • OpenTelemetry 提供了跨语言和跨平台的应用监控和追踪,通过标准化API和数据格式,支持多语言和集成度高。
    • Elastic APM 与Elastic Stack集成,提供强大的数据分析和可视化能力,适合需要全面监控和日志分析的场景。
  2. 性能特点

    • ZipkinJaeger 轻量级且高度可扩展,适合于小规模到大规模部署。
    • SkyWalking 提供了性能指标监控、服务依赖分析等丰富功能,适合复杂的微服务架构。
    • OpenTelemetry 通过标准化API和数据格式,保证了高效的数据采集和传输,支持多种语言和框架。
    • Elastic APM 提供了强大的数据分析和可视化能力,与Elastic Stack的整合使得监控和调优更加全面。
  3. 支持语言和框架

    • ZipkinJaegerSkyWalkingElastic APM 均支持主流的编程语言如Java、Go、Python等,覆盖了广泛的开发环境和技术栈。
    • OpenTelemetry 更进一步地提供了跨语言和跨平台的支持,使得在多语言和混合技术栈中的集成更加便捷。
  4. 开源状态

    • 所有列出的工具均为开源项目,拥有活跃的社区支持和持续的更新。

通过以上对比分析,可以根据具体的需求和系统架构选择合适的链路追踪工具,以实现最佳的应用监控和性能优化效果。

三、常见链路追踪工具架构及工作流程

Zipkin 架构及工作流程

Zipkin
Application
Send Request
Create Span
Call Service B
Create Span
Call Service C
Create Span
Store Spans
Query Spans
Display Traces
Zipkin Collector
Zipkin Storage
Zipkin Query Service
Zipkin UI
Client
Service A
Service B
Service C
解释说明:
  1. Client 发起请求到 Service A
  2. Service A 处理请求并创建一个Span,将Span信息发送到 Zipkin Collector
  3. Service A 调用 Service BService B 处理请求并创建另一个Span,将Span信息发送到 Zipkin Collector
  4. Service B 调用 Service CService C 处理请求并创建新的Span,将Span信息发送到 Zipkin Collector
  5. Zipkin Collector 收集所有的Span信息并存储到 Zipkin Storage 中。
  6. Zipkin Query Service 查询存储中的Span数据。
  7. Zipkin UI 显示完整的请求追踪信息和详细的Span数据。

Jaeger 架构及工作流程

Jaeger
Application
Send Request
Create Span
Call Service B
Create Span
Call Service C
Create Span
Send Spans
Store Spans
Query Spans
Display Traces
Jaeger Agent
Jaeger Collector
Jaeger Storage
Jaeger Query Service
Jaeger UI
Client
Service A
Service B
Service C
解释说明:
  1. Client 发起请求到 Service A
  2. Service A 处理请求并创建一个Span,将Span信息发送到 Jaeger Agent
  3. Service A 调用 Service BService B 处理请求并创建另一个Span,将Span信息发送到 Jaeger Agent
  4. Service B 调用 Service CService C 处理请求并创建新的Span,将Span信息发送到 Jaeger Agent
  5. Jaeger Agent 将收集到的Span信息发送到 Jaeger Collector
  6. Jaeger Collector 将Span信息存储到 Jaeger Storage 中。
  7. Jaeger Query Service 查询存储中的Span数据。
  8. Jaeger UI 显示完整的请求追踪信息和详细的Span数据。

SkyWalking 架构及工作流程

SkyWalking
Application
Send Request
Create Span
Call Service B
Create Span
Call Service C
Create Span
Send Spans
Store Spans
Query Spans
Display Traces
SkyWalking Agent
SkyWalking OAP Server
SkyWalking Storage
SkyWalking Query Service
SkyWalking UI
Client
Service A
Service B
Service C
解释说明:
  1. Client 发起请求到 Service A
  2. Service A 处理请求并创建一个Span,将Span信息发送到 SkyWalking Agent
  3. Service A 调用 Service BService B 处理请求并创建另一个Span,将Span信息发送到 SkyWalking Agent
  4. Service B 调用 Service CService C 处理请求并创建新的Span,将Span信息发送到 SkyWalking Agent
  5. SkyWalking Agent 将收集到的Span信息发送到 SkyWalking OAP Server
  6. SkyWalking OAP Server 将Span信息存储到 SkyWalking Storage 中。
  7. SkyWalking Query Service 查询存储中的Span数据。
  8. SkyWalking UI 显示完整的请求追踪信息和详细的Span数据。

OpenTelemetry 架构及工作流程

OpenTelemetry
Application
Send Request
Create Span
Call Service B
Create Span
Call Service C
Create Span
Send Spans
Process & Export Spans
Query Spans
Display Traces
OpenTelemetry SDK
OpenTelemetry Collector
Backend Storage
Query Service
Visualization UI
Client
Service A
Service B
Service C
解释说明:
  1. Client 发起请求到 Service A
  2. Service A 处理请求并创建一个Span,将Span信息通过 OpenTelemetry SDK 发送到 OpenTelemetry Collector
  3. Service A 调用 Service BService B 处理请求并创建另一个Span,将Span信息通过 OpenTelemetry SDK 发送到 OpenTelemetry Collector
  4. Service B 调用 Service CService C 处理请求并创建新的Span,将Span信息通过 OpenTelemetry SDK 发送到 OpenTelemetry Collector
  5. OpenTelemetry Collector 处理并导出Span数据到后端存储系统(如Elasticsearch、Jaeger、Prometheus等)。
  6. Backend Storage 存储Span数据。
  7. Query Service 查询存储中的Span数据。
  8. Visualization UI 显示完整的请求追踪信息和详细的Span数据。

Elastic APM 架构及工作流程

Elastic APM
Application
Send Request
Create Span
Call Service B
Create Span
Call Service C
Create Span
Send Spans
Store Spans
Query Spans
Visualize Traces
APM Agent
APM Server
Elasticsearch
Kibana
Client
Service A
Service B
Service C
H
解释说明:
  1. Client 发起请求到 Service A
  2. Service A 处理请求并创建一个Span,将Span信息发送到 APM Agent
  3. Service A 调用 Service BService B 处理请求并创建另一个Span,将Span信息发送到 APM Agent
  4. Service B 调用 Service CService C 处理请求并创建新的Span,将Span信息发送到 APM Agent
  5. APM Agent 将收集到的Span信息发送到 APM Server
  6. APM Server 将Span信息存储到 Elasticsearch 中。
  7. Kibana 查询Elasticsearch中的Span数据。
  8. Kibana 显示完整的请求追踪信息和详细的Span数据。

四、链路追踪关键指标

在不同的应用场景中,选择和评估链路追踪工具时需要关注的指标会有所不同。以下是一些常见的场景及其对应的关键指标:

1. 性能优化

在进行性能优化时,重要的指标包括:

  • 追踪延迟(Trace Latency):追踪工具对请求响应时间的影响,低延迟工具更适合性能敏感的应用。
  • 采样率(Sampling Rate):追踪数据的采样比例,高采样率可以提供更详细的性能数据,但会增加系统开销。
  • 吞吐量(Throughput):工具能够处理的请求数量,高吞吐量工具可以更好地应对高并发场景。

2. 故障排查

在故障排查场景中,关注的指标包括:

  • 错误率(Error Rate):工具能够准确捕捉和报告错误请求的比例,帮助快速定位问题。
  • 根因分析能力(Root Cause Analysis Capability):工具是否提供详细的错误原因分析,帮助快速找到问题根源。
  • 服务依赖图(Service Dependency Graph):工具是否能提供清晰的服务依赖关系图,帮助理解服务间的调用关系。

3. 监控和可视化

在监控和可视化场景中,关键指标包括:

  • 可视化能力(Visualization Capability):工具提供的可视化功能,是否支持直观的Trace和Span展示。
  • 查询性能(Query Performance):在大规模数据下,工具的查询速度和效率。
  • 实时性(Real-time Capability):工具数据的实时性,是否能及时展示最新的追踪数据。

4. 扩展性和集成性

在扩展性和集成性方面,需要关注:

  • 扩展性(Scalability):工具在大规模部署下的表现,是否能够处理海量数据。
  • 集成性(Integration Capability):工具与其他监控系统(如Prometheus、Elasticsearch等)的集成能力。
  • 支持的语言和框架(Supported Languages and Frameworks):工具是否支持当前系统使用的编程语言和框架。

5. 安全性和隐私

在安全性和隐私方面,关注的指标包括:

  • 数据加密(Data Encryption):工具是否支持数据的传输和存储加密。
  • 访问控制(Access Control):是否提供细粒度的访问控制,确保只有授权用户可以访问敏感数据。
  • 隐私保护(Privacy Protection):工具是否支持对敏感数据的屏蔽或脱敏处理。

不同工具的关键指标对比

工具性能优化故障排查监控和可视化扩展性和集成性安全性和隐私
Zipkin低延迟,适合小规模部署提供基本的错误率和依赖图分析提供基础的可视化功能可扩展,但需要自行配置和集成基本支持,需自行实现安全控制
Jaeger高吞吐量,适合大规模部署提供详细的错误分析和依赖图提供强大的可视化功能高度可扩展,良好集成性支持数据加密和访问控制
SkyWalking高性能,全面的性能指标监控提供详细的根因分析和依赖图提供丰富的可视化功能和实时数据展示高度可扩展,支持多种后端存储和集成支持多种安全机制和隐私保护
OpenTelemetry标准化API,低开销提供基础的错误分析和依赖图提供灵活的可视化和查询功能跨语言,良好的集成性和扩展性支持数据加密和访问控制
Elastic APM高性能分析和可视化提供详细的错误和根因分析强大的可视化和实时监控能力高度可扩展,与Elastic Stack集成支持数据加密和访问控制

通过以上对比,可以根据具体的应用场景和需求选择合适的链路追踪工具。例如,对于性能优化,可以选择低延迟和高吞吐量的工具;对于故障排查,可以选择提供详细错误分析和根因分析的工具;对于监控和可视化需求,可以选择提供强大可视化功能的工具。

五、一个秘密

图片

锅总个人博客

https://gentlewok.blog.csdn.net/

锅总微信公众号

图片

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营day29 | 134. 加油站 、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列

碎碎念:加油 参考:代码随想录 134. 加油站 题目链接 134. 加油站 思想 局部最优: 一旦currentSum为负数,起始位置至少要是i1。 全局最优: 最后可以跑完一圈。 局部最优可以推出全局最优且找不到反例,所…

CST软件进行时域自适应网格设置步骤

这一期,我们回答一个大家非常关注的网格的问题。仿真软件的网格质量直接决定仿真的精度和效率,设置合理的网格才能将仿真做的又快有准。CST的微波工作室有多种求解器,如果用频域求解器(F)来仿真,有限元算法…

TCP的可靠机制

TCP的可靠机制 前言 要了解TCP的可靠机制,我们必须要先熟悉TCP的报文,在这篇文章中有详细介绍TCP的报文 : 并且确认应答机制也在该文章中提到,所以这篇文章就不会再介绍确认应答了。 超时重传 我们都知道,报文在网…

详解Qt 之QMdiArea 和 QMdiSubWindow

文章目录 前言QMdiArea概念作用为什么需要 QMdiAreaQMdiArea 的主要函数和成员函数列表 QMdiSubWindow概念作用为什么需要 QMdiSubWindowQMdiSubWindow 的主要函数和成员函数列表 示例代码 更多用法... 总结 前言 在复杂的应用程序中,尤其是那些需要同时管理多个子…

RabbitMQ快速入门(MQ的概念、安装RabbitMQ、在 SpringBoot 项目中集成 RabbitMQ )

文章目录 1. 补充知识:同步通讯和异步通讯1.1 同步通讯1.2 异步通讯 2. 同步调用的缺点2.1 业务耦合2.2 性能较差2.3 级联失败 3. 什么情况下使用同步调用4. 异步调用5. 异步调用的优点和缺点5.1 异步调用的优点5.1.1 解除耦合,拓展性强5.1.2 无需等待&a…

SQL必知必会

SQL必知必会 一些SQL知识,出自极客时间陈旸老师《SQL必知必会》 https://time.geekbang.org/column/intro/100029501 基础 视图 视图作为一张虚拟表,帮我们封装了底层与数据表的接口。它相当于是一张表或多张表的数据结果集。视图的这一特点&#x…

DMB,DSB,ISB三个指令区别

此部分说明三个指令的具体区别(在指令流水线上说明),这三个指令主要目的在于确保程序在多处理器环境下的稳定性和一致性,避免由于指令乱序和内存操作重排引起的不可预测行为 一个简化的流水线,包含以下阶段&#xff1…

【git】git常用命令提交规范

Git 是程序员工作中不可或缺的版本控制工具,以下是一些优化后的常用 Git 命令列表,旨在帮助你更高效地使用 Git 进行版本控制。 基础操作 拉取代码 git clone xxx.git创建分支 git branch dev切换分支 git checkout dev # 或者 git switch dev创建并切换…

Mirror学习笔记(一) 简介

文章目录 一、常规学习:Mirror核心功能有服务器和主机 二、时间戳批处理时间戳 三、TCP和UDP四、CCU(同时在线人数)五、SyncDirection(同步方向)六、RTT(往返时间)七、Connection Quality(连接质量)八、Lag Compensati…

Android mLruProcesses的分布结构

AMS中的进程管理 final ArrayList<ProcessRecord> mLruProcesses new ArrayList<ProcessRecord>(); 在AMS的内部属性中使用mLruProcesses集合保存所有的进程信息&#xff0c;AMS将所有进程按照优先级从低到高的顺序保存着对应的ProcessRecord信息&#xff0c;即排…

25、Python之面向对象:私有属性是掩耳盗铃还是恰到好处

引言 声明&#xff0c;今天的文章中没有一行Python代码&#xff0c;更多的是对编程语言设计理念的思考。 上一篇文章中介绍了关于Python面向对象封装特性的私有属性的相关内容&#xff0c;提到了Python中关于私有属性的实现是通过“名称混淆”的方式来实现的&#xff0c;我们…

【Python体验】第五天:目录搜索、数据爬虫(评论区里写作业)

文章目录 目录搜索 os、shutil库数据爬虫 request、re作业&#xff1a;爬取案例的top250电影的关键信息&#xff08;名称、类型、日期&#xff09;&#xff0c;并保存在表格中 目录搜索 os、shutil库 os 模块提供了非常丰富的方法用来处理文件和目录。 os.listdir(path)&#x…

连环画:80、90后的童年记忆与副业项目的AI新玩法

在那个纯真的年代&#xff0c;当80、90后的孩子们还在为学业忙碌之余&#xff0c;一种名为连环画的读物成为了他们心中难以磨灭的记忆。 这些由一幅幅精美插图串联起来的故事&#xff0c;不仅满足了他们对知识的渴望&#xff0c;更在无形中丰富了他们的想象力和审美能力。在那…

智云-一个抓取web流量的轻量级蜜罐

智云-一个抓取web流量的轻量级蜜罐 安装环境要求 apache php7.4 mysql8 github地址 https://github.com/xiaoxiaoranxxx/POT-ZHIYUN 系统演示

Xilinx FPGA:vivado SPI实现FLASH通信

一、实验要求 要求使用SPI协议实现对flash芯片的页编程、读操作、页擦除等功能。 二、模块划分 大概的时序图&#xff1a; 三、程序设计 &#xff08;1&#xff09;接收端模块 timescale 1ns / 1ps module uart_rx(input sys_clk ,input …

ShardingSphere实战(2)- 水平分表

项目环境&#xff1a; JDK11 MySQL 8.0.30 Springboot 2.7.4 Mybatis ShardingSphere HikariCP 连接池 一、Maven 依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><versi…

C++ | string

前言 本篇博客讲解c中的string类的使用(常用接口) &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee:普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见&#x1f4dd; &#x1f389…

Redis持久化之RDB和AOF详解

持久化是确保 Redis 数据在服务器重启或崩溃时不丢失的关键功能。由于 Redis 是基于内存的数据库&#xff0c;如果不进行持久化&#xff0c;所有数据都存在于内存中&#xff0c;一旦服务器进程退出&#xff0c;内存中的数据就会丢失。持久化机制可以将 Redis 的数据库状态保存到…

C# Unity 面向对象补全计划 之 访问修饰符

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列旨在通过补全学习之后&#xff0c;给出任意类图都能实现并做到逻辑上严丝合缝

vue3项目结构梳理:

总览 1.vscode文件&#xff1a; 通常用于存放Visual Studio Code编辑器的插件的配置 2.node_moudles文件夹&#xff1a; 这个文件夹包含了项目所需的所有npm依赖包。&#xff08;需要在根目录下执行npm i命令安装这个文件夹&#xff09; 或者在项目根目录&#xff08;packa…