制作网站的分类/有了域名怎么建网站
链路追踪是什么?常用的链路追踪工具有哪些?它们的异同、架构、工作流程及关键指标有哪些?希望读完本文能帮您解答这些疑惑!
一、链路追踪简介
链路追踪技术(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(领取大厂面经等资料),欢迎加我的…...

php实现动态登录
简介: 效果:通过前端页面的注册,通过MD5将密码加密,发送到数据库,通过验证数据库的内容实现登录,以及各种保证安全的措施 实验环境:phphtmlcssmysql数据表,使用html css设计注册&a…...

Servlet2-HTTP协议、HttpServletRequest类、HttpServletResponse类
目录 HTTP协议 什么是HTTP协议 HTTP协议的特点 请求的HTTP协议格式 GET请求 POST请求 常用的请求头说明 哪些是GET请求,哪些是POST请求 响应的HTTP协议格式 常见的响应码说明 MIME类型说明 HttpServletRequest类 作用 常用方法 如何获取请求参数 po…...

探索数据的内在世界:sklearn中分层特征聚类标签的可视化技术
探索数据的内在世界:sklearn中分层特征聚类标签的可视化技术 在机器学习中,聚类是一种探索数据结构的强大工具。对于具有分层特征的数据,如文本、时间序列或分类标签,聚类结果的可视化可以提供深入的洞见。本文将详细介绍如何在s…...

airtest定位方法
airtest定位方法 最近遇到一个比较新颖的airtest方法,分享给大家。一键三连; airtest是一款用于自动化测试的Python库,被广泛应用于移动应用和游戏的测试中。在进行自动化测试时,定位元素是非常重要的一步,因为只有准…...

排列组合 n*(n-1)*(n-m+1)
n*(n-1)*(n-m1)/m! --# 组合 n*(n-1)*(n-m1)/m! local function get_combinations(n,m) c 1 c0 1 for i 1,m do c c*(n-i1) c c/i end return math.floor(c) end print(get_combinations(10,6)) 打印出来为:210...

Python面试整理-数据处理和分析
在Python中,数据处理和分析是一项非常重要的应用,得益于丰富的第三方库和工具,Python已经成为数据科学家和分析师的首选语言之一。以下是进行数据处理和分析时常用的工具和方法: 1. 数据处理 a. Pandas ● 功能: Pandas 提供了强大的 DataFrame 结构,使得数据操作和预处理…...

职业教育计算机网络综合实验实训室建设应用案例
近年来,职业教育在培养技能型人才方面发挥着越来越重要的作用。然而,传统的计算机网络技术教学模式往往重理论、轻实践,导致学生缺乏实际操作能力和职业竞争力。为了改变这一现状,唯众结合职业教育特点,提出了“教、学…...

【Docomo】5G
我们想向您介绍第五代移动通信系统“5G”。 5G 什么是5G?支持5G的技术什么是 5G SA(独立)?实现高速率、大容量的5G新频段Docomo的“瞬时5G”使用三个宽广的新频段 什么是5G? 5G(第五代移动通信系统&#x…...

Servlet详解(Servlet源码)
Servlet Servlet是运行在Web服务器或应用服务器上的小程序,它作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。Servlet能够接收来自客户端的基于HTTP协议的请求,并且对请求进行响应。 Servlet是用来处理客户端请…...

仓颉--接收控制台输入
package projectNameimport std.console.*main() {Console.stdOut.write("请输入信息1:")var c Console.stdIn.readln() // 输入:你好,请问今天星期几?var r c.getOrThrow()Console.stdOut.writeln("输入的信息1…...