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

锅总浅析链路追踪技术

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

一、链路追踪简介

链路追踪技术(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/

锅总微信公众号

图片

相关文章:

锅总浅析链路追踪技术

链路追踪是什么?常用的链路追踪工具有哪些?它们的异同、架构、工作流程及关键指标有哪些?希望读完本文能帮您解答这些疑惑! 一、链路追踪简介 链路追踪技术(Distributed Tracing)是一种用于监控和分析分布…...

为什么阿里开发手册不建议使用Date类?

在日常编码中,基本上99%的项目都会有一个DateUtil工具类,而时间工具类里用的最多的就是java.util.Date。 大家都这么写,这还能有问题?? 当你的“默认常识”出现问题,这个打击,就是毁灭性的。 …...

中间层 k8s(Kubernetes) 到底是什么,架构是怎么样的?

你是一个程序员,你用代码写了一个博客应用服务,并将它部署在了云平台上。 但应用服务太过受欢迎,访问量太大,经常会挂。 所以你用了一些工具自动重启挂掉的应用服务,并且将应用服务部署在了好几个服务器上,…...

【CTFWP】ctfshow-web40

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 题目介绍:题目分析:payload:payload解释:payload2:payload2解释:flag 题目介绍: …...

项目实战1(30小时精通C++和外挂实战)

项目实战1(30小时精通C和外挂实战) 01-MFC1-图标02-MFC2-按钮、调试、打开网页05-MFC5-checkbox及按钮绑定对象06--文件格式、OD序列号08-暴力破解09-CE10-秒杀僵尸 01-MFC1-图标 这个外挂只针对植物大战僵尸游戏 开发这个外挂,首先要将界面…...

百日筑基第三十六天

今日论道还算顺利,只可惜感到也没学到什么东西。晚些时候师祖问话,主要是来这边之后有什么困难之类,好像也没遇到需要他来帮我解决的困难,于是问了些修炼方法之类。...

MySQL: ALTER

正文 在数据库管理系统(DBMS)中,DDL(Data Definition Language)、DCL(Data Control Language)、和 DML(Data Manipulation Language)是三种主要的SQL(Struct…...

微前端技术预研 - bit初体验

1.关于什么是微前端以及微前端的发展, 当前主流框架以及实现技术等,可参考这篇总结(非常全面), 微前端总结:目录详见下图 本文内容主要针对bit框架的实时思路以及具体使用。 1.什么是Bit? Bit 是可组合软件的构建…...

对象关系映射---ORM

一、什么是ORM? ORM(Object Relational Mapping),即对象关系映射,是一种程序设计技术,用于在面向对象编程语言中实现对象和关系型数据库之间的映射。 二、ORM是干什么的? ORM 的主要目的是简…...

Django REST Framework(十七)Authentication

1.认证Authentication 在 Django REST framework (DRF) 中,可以在配置文件中配置全局默认的认证方案。常见的认证方式包括 cookie、session、和 token。DRF 提供了灵活的认证机制,可以在全局配置文件中设置默认认证方式,也可以在具体的视图类…...

FPGA开发——数码管的使用

一、概述 在我们的日常开发中,数字显示的领域中用得最多的就是数码管,这篇文章也是围绕数码管的静态显示和动态显示进行一个讲解。 1、理论 (1)数码管原理图 在对数码管进行相关控制时,其实就是对于8段发光二极管和…...

什么是网络安全等级保护测评服务?

等保测评 依据国家网络安全等级保护制度规定,按照有关管理规范和技术标准,对非涉及国家秘密的网络安全等级保护状况进行检测评估。定级协助 根据等级保护对象在国家安全、经济建设、社会生活中的重要程度,以及一旦遭到破坏、丧失功能或者数据…...

基于深度学习的多模态情感分析

基于深度学习的多模态情感分析是一个结合不同类型数据(如文本、图像、音频等)来检测和分析情感的领域。它利用深度学习技术来处理和融合多模态信息,从而提高情感分析的准确性和鲁棒性。以下是对这一领域的详细介绍: 1. **多模态情…...

Glove-词向量

文章目录 共现矩阵共线概率共线概率比词向量训练总结词向量存在的问题 上一篇文章词的向量化介绍了词的向量化,词向量的训练方式可以基于语言模型、基于窗口的CBOW和SKipGram的这几种方法。今天介绍的Glove也是一种训练词向量的一种方法,他是基于共现概率…...

Plugin ‘mysql_native_password‘ is not loaded`

Plugin mysql_native_password is not loaded mysql_native_password介绍1. 使用默认的认证插件2. 修改 my.cnf 或 my.ini 配置文件3. 加载插件(如果确实没有加载)4. 重新安装或检查 MySQL 版本 遇到错误 ERROR 1524 (HY000): Plugin mysql_native_passw…...

Hive数据类型

原生数据类型 准备数据 查看表信息 加载数据 查看数据 复杂数据类型-数组 准备数据 查看数据 ​优化 复杂数据类型-map 准备数据 查看数据 复杂数据类型-默认分隔符 准备数据 查看数据 原生数据类型 准备数据 -- 1 建库 drop database if exists db_1 cascade;…...

OSI七层网络模型:构建网络通信的基石

在计算机网络领域,OSI(Open Systems Interconnection)七层模型是理解网络通信过程的关键框架。该模型将网络通信过程细分为七个层次,每一层都有其特定的功能和职责,共同协作完成数据从发送端到接收端的传输。接下来&am…...

MSYS2下载安装和使用

Minimalist GNU(POSIX)system on Windows,Windows下的GNU环境。 目录 1. 安装 2. pacman命令 3. 配置vim 4. 一些使用示例 4.1 编译代码 4.2 SSH登录远程服务器 1. 安装 官网下载:https://www.msys2.org/ 双击.exe文件&am…...

机器学习中的决策树算法——从理论到实践完整指南

决策树在机器学习中的应用与原理 1. 介绍1.1 定义和基本概念1.2 决策树在机器学习中的角色和重要性 2. 决策树的结构2.1 节点、分支、叶子节点的定义和功能2.1.1 节点2.1.2 分支2.1.3 叶子节点 2.2 树的深度和宽度的影响2.2.1 树的深度2.2.2 树的宽度 3. 决策树的构建方法3.1 基…...

FFplay介绍及命令使用指南

😎 作者介绍:欢迎来到我的主页👈,我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun(领取大厂面经等资料),欢迎加我的…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

反射获取方法和属性

Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

云原生玩法三问:构建自定义开发环境

云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...