锅总浅析链路追踪技术
链路追踪是什么?常用的链路追踪工具有哪些?它们的异同、架构、工作流程及关键指标有哪些?希望读完本文能帮您解答这些疑惑!
一、链路追踪简介
链路追踪技术(Distributed Tracing)是一种用于监控和分析分布式系统中的请求流的技术。随着微服务架构的广泛应用,单一请求可能会经过多个服务节点,这使得监控和诊断问题变得复杂。链路追踪技术通过记录每个请求在各个服务节点中的详细信息,帮助开发者理解和优化系统性能。以下是链路追踪技术的关键概念和常见工具:
关键概念
-
Trace(追踪):一个Trace代表一次完整的请求处理过程,从发起请求到最终完成,可能会经过多个服务节点。
-
Span(跨度):一个Span代表在某个服务节点中对请求的处理过程。一个Trace由多个Span组成。
-
Span Context(跨度上下文):包含Trace ID和Span ID等信息,用于关联各个Span。
-
Instrumentation(插桩):在代码中添加钩子,用于记录Trace和Span信息。
常见工具
-
Zipkin:一个开源的分布式追踪系统,提供收集、存储、查询和可视化Trace数据的功能。支持多种语言的客户端库。
-
Jaeger:由Uber开源的分布式追踪系统,提供Trace数据的收集、存储和分析功能。与Kubernetes和Prometheus等工具集成良好。
-
SkyWalking:一个开源的应用性能监控(APM)和分布式追踪系统,设计用于监控和诊断微服务、云原生和容器化架构的应用。提供详细的链路追踪、性能监控、服务依赖分析等功能,支持多种语言和框架。
-
OpenTelemetry:一个统一的标准和工具集,用于收集分布式系统的度量数据、日志和追踪信息。它是OpenTracing和OpenCensus的合并项目,支持多种语言和后端。
-
Elastic APM:Elastic公司提供的应用性能监控解决方案,集成了链路追踪功能,可以与Elasticsearch和Kibana配合使用,提供强大的数据分析和可视化能力。
工作原理
-
数据采集:通过在代码中插入追踪代码或使用自动化工具,收集请求的Trace和Span数据。
-
数据传输:将采集到的数据发送到集中式的追踪系统(如Zipkin、Jaeger或SkyWalking)。
-
数据存储:追踪系统会将接收到的Trace和Span数据存储在数据库中,通常是高性能的NoSQL数据库。
-
数据分析和可视化:使用追踪系统的界面或集成的可视化工具,分析和展示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 等 | 是 |
分析说明:
-
主要应用场景:
- Zipkin 和 Jaeger 主要用于性能优化和故障排查,适合于需要快速定位和解决问题的场景。
- SkyWalking 专注于微服务和云原生环境下的应用性能监控和优化,提供了详细的链路追踪和服务依赖分析。
- OpenTelemetry 提供了跨语言和跨平台的应用监控和追踪,通过标准化API和数据格式,支持多语言和集成度高。
- Elastic APM 与Elastic Stack集成,提供强大的数据分析和可视化能力,适合需要全面监控和日志分析的场景。
-
性能特点:
- Zipkin 和 Jaeger 轻量级且高度可扩展,适合于小规模到大规模部署。
- SkyWalking 提供了性能指标监控、服务依赖分析等丰富功能,适合复杂的微服务架构。
- OpenTelemetry 通过标准化API和数据格式,保证了高效的数据采集和传输,支持多种语言和框架。
- Elastic APM 提供了强大的数据分析和可视化能力,与Elastic Stack的整合使得监控和调优更加全面。
-
支持语言和框架:
- Zipkin、Jaeger、SkyWalking 和 Elastic APM 均支持主流的编程语言如Java、Go、Python等,覆盖了广泛的开发环境和技术栈。
- OpenTelemetry 更进一步地提供了跨语言和跨平台的支持,使得在多语言和混合技术栈中的集成更加便捷。
-
开源状态:
- 所有列出的工具均为开源项目,拥有活跃的社区支持和持续的更新。
通过以上对比分析,可以根据具体的需求和系统架构选择合适的链路追踪工具,以实现最佳的应用监控和性能优化效果。
三、常见链路追踪工具架构及工作流程
Zipkin 架构及工作流程
解释说明:
- Client 发起请求到 Service A。
- Service A 处理请求并创建一个Span,将Span信息发送到 Zipkin Collector。
- Service A 调用 Service B,Service B 处理请求并创建另一个Span,将Span信息发送到 Zipkin Collector。
- Service B 调用 Service C,Service C 处理请求并创建新的Span,将Span信息发送到 Zipkin Collector。
- Zipkin Collector 收集所有的Span信息并存储到 Zipkin Storage 中。
- Zipkin Query Service 查询存储中的Span数据。
- Zipkin UI 显示完整的请求追踪信息和详细的Span数据。
Jaeger 架构及工作流程
解释说明:
- Client 发起请求到 Service A。
- Service A 处理请求并创建一个Span,将Span信息发送到 Jaeger Agent。
- Service A 调用 Service B,Service B 处理请求并创建另一个Span,将Span信息发送到 Jaeger Agent。
- Service B 调用 Service C,Service C 处理请求并创建新的Span,将Span信息发送到 Jaeger Agent。
- Jaeger Agent 将收集到的Span信息发送到 Jaeger Collector。
- Jaeger Collector 将Span信息存储到 Jaeger Storage 中。
- Jaeger Query Service 查询存储中的Span数据。
- Jaeger UI 显示完整的请求追踪信息和详细的Span数据。
SkyWalking 架构及工作流程
解释说明:
- Client 发起请求到 Service A。
- Service A 处理请求并创建一个Span,将Span信息发送到 SkyWalking Agent。
- Service A 调用 Service B,Service B 处理请求并创建另一个Span,将Span信息发送到 SkyWalking Agent。
- Service B 调用 Service C,Service C 处理请求并创建新的Span,将Span信息发送到 SkyWalking Agent。
- SkyWalking Agent 将收集到的Span信息发送到 SkyWalking OAP Server。
- SkyWalking OAP Server 将Span信息存储到 SkyWalking Storage 中。
- SkyWalking Query Service 查询存储中的Span数据。
- SkyWalking UI 显示完整的请求追踪信息和详细的Span数据。
OpenTelemetry 架构及工作流程
解释说明:
- Client 发起请求到 Service A。
- Service A 处理请求并创建一个Span,将Span信息通过 OpenTelemetry SDK 发送到 OpenTelemetry Collector。
- Service A 调用 Service B,Service B 处理请求并创建另一个Span,将Span信息通过 OpenTelemetry SDK 发送到 OpenTelemetry Collector。
- Service B 调用 Service C,Service C 处理请求并创建新的Span,将Span信息通过 OpenTelemetry SDK 发送到 OpenTelemetry Collector。
- OpenTelemetry Collector 处理并导出Span数据到后端存储系统(如Elasticsearch、Jaeger、Prometheus等)。
- Backend Storage 存储Span数据。
- Query Service 查询存储中的Span数据。
- Visualization UI 显示完整的请求追踪信息和详细的Span数据。
Elastic APM 架构及工作流程
解释说明:
- Client 发起请求到 Service A。
- Service A 处理请求并创建一个Span,将Span信息发送到 APM Agent。
- Service A 调用 Service B,Service B 处理请求并创建另一个Span,将Span信息发送到 APM Agent。
- Service B 调用 Service C,Service C 处理请求并创建新的Span,将Span信息发送到 APM Agent。
- APM Agent 将收集到的Span信息发送到 APM Server。
- APM Server 将Span信息存储到 Elasticsearch 中。
- Kibana 查询Elasticsearch中的Span数据。
- 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(领取大厂面经等资料),欢迎加我的…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
