SkyWalking链路追踪-技术文档首页

SkyWalking 文档中文版(社区提供) (skyapm.github.io)https://skyapm.github.io/document-cn-translation-of-skywalking/

SkyWalking-基本概念

SkyWalking链路追踪是一个用于分布式系统的性能监控工具,它帮助开发人员了解系统中各组件之间的调用关系和性能信息。通过追踪每个请求从一个组件到另一个组件的路径,SkyWalking可以提供实时的链路信息,包括请求的路径、耗时和错误信息等。

这个工具的基本概念是通过在分布式系统中的各个组件中插入Agent来追踪请求。这些Agent可以通过自动和手动的方式添加到各个组件中。一旦Agent被添加,它们会自动收集和发送关于请求的信息,然后将这些信息汇总到一个集中的位置进行分析和可视化展示。

SkyWalking链路追踪还提供了一些其他功能,例如性能指标的收集和展示、错误告警、拓展性和可扩展性等。这使得开发人员能够更好地理解系统的运行情况,发现潜在的性能问题,并及时进行调优和修复。

总的来说,SkyWalking链路追踪是一个有助于开发人员监控和优化分布式系统性能的工具,它提供了实时的链路信息和可视化展示,有助于提高系统的可靠性和性能。

SkyWalking-架构体系

SkyWalking的架构体系由以下几个核心组件组成:

  1. Collector(收集器):Collector是SkyWalking的核心组件之一,负责接收来自各个Agent的追踪数据,并将其存储到数据存储器中。Collector提供了一个统一的接口,通过这个接口可以获取链路追踪数据,以便进行后续的分析和展示。

  2. Storage(存储器):Storage负责接收Collector送来的追踪数据,并将其持久化存储。存储器可以使用各种类型的数据库,如关系型数据库、NoSQL数据库或分布式存储系统等。

  3. UI(用户界面):UI是SkyWalking提供的可视化界面,用于展示追踪数据的各种指标和图表。开发人员可以通过UI实时监控系统的性能,并查看请求的路径、耗时和异常信息等。

  4. Agent(代理):Agent是SkyWalking在分布式系统中用于追踪请求的关键组件。Agent被插入到各个组件中,通过自动或手动的方式与这些组件集成。Agent负责收集各个组件的性能指标和追踪数据,并将其发送给Collector进行处理。

  5. Probe/Instrumentation(探针/仪表):Probe/Instrumentation是用于追踪应用程序内部方法调用和性能的组件。通过在代码中插入探针或仪表,开发人员可以在应用程序内部收集更详细的性能指标,并将其发送给Agent进行处理。

这些组件相互协作,构成了SkyWalking的架构体系。它们共同工作,帮助开发人员实现对分布式系统的性能监控和优化。

工作原理

分布式链路追踪系统,链路的追踪大体流程如下:

  1. Agent 收集 Trace 数据。
  2. Agent 发送 Trace 数据给 Collector 。
  3. Collector 接收 Trace 数据。
  4. Collector 存储 Trace 数据到存储器,例如,数据库

解决问题

  • 服务链路过长或过于复杂,无法快速并准确的定位问题。
  • 业务链处理时间过长,无法确定是哪个环节存在的问题。
  • 如何梳理服务与服务之间的依赖关系?
  • 如何快速发现定位问题并找到对应的错误信息?

分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。

链路追踪的主要功能:

  • 故障快速定位:可以通过调用链结合业务日志快速定位错误信息。
  • 链路性能可视化:各个阶段链路耗时,服务依赖关系可以通过可视化界面展示出来。
  • 链路分析:通过分析链路耗时、服务依赖关系可以得到用户的行为路径,汇总分析应用在很多业务场景。

该方案技术点

(1)Trace

Trace的含义比较直观,就是链路,指一个请求经过所有服务的路径,服务间经过的局部链路构成了一条完整的链路,其中每一条局部链路都用一个全局唯一的traceid来标识。

SkyWalking链路追踪中Trace概念以及Trace与span的关系_艺舟先生的博客-CSDN博客

(2)Span

Span用来表示上下层的父子关系,同一层级parent id相同,span id不同,span id从小到大表示请求的顺序。通过事先在日志中埋点,找出相同traceId的日志,再加上parent id和span id就可以将一条完整的请求调用链串联起来。

SkyWalking链路追踪中span全解_艺舟先生的博客-CSDN博客

(3)采样

由于每一个请求都会生成一个链路,为了减少性能消耗,避免存储资源的浪费,采集器并不会上报所有的span数据,而是使用采样的方式。举个例子,每秒有1000个请求访问系统,如果设置采样率为1/1000,那么只会上报一个请求到存储端。

SkyWalking链路追踪-Collector(收集器)_艺舟先生的博客-CSDN博客

SkyWalking链路追踪-Agent (代理人)_艺舟先生的博客-CSDN博客

(4)存储

链路中的span数据经过收集和上报后会集中存储在一个地方,常用的存储有Mysql,ElasticSearch, HBase, In-memory DB等。

配置SkyWalking的存储方式需要根据您的具体需求和系统架构来选择适合的存储方式。以下是一些常用的存储方式和配置方法:

  1. 存储到数据库:您可以将Trace数据存储到关系型数据库(如MySQL)或文档型数据库(如Elasticsearch)中。配置存储到数据库时,您需要提供数据库的连接信息和认证信息,并创建相应的表或索引用于存储Trace数据。您可以在Collector的配置文件中进行相应的参数设置。

  2. 存储到文件系统:您可以将Trace数据存储到本地文件系统或分布式文件系统(如Hadoop HDFS)中。配置存储到文件系统时,您需要指定存储路径和文件命名规则等配置参数。Collector会将Trace数据按照指定的格式写入到文件中,以供后续查询和分析。

  3. 存储到消息队列:您可以将Trace数据存储到消息队列(如Kafka、RabbitMQ)中。配置存储到消息队列时,您需要提供消息队列的连接信息和授权信息,并指定相应的主题或队列名称。Collector将Trace数据发送到消息队列中,供后续进行消费和处理。

  4. 存储到内存:如果您的系统对实时性要求很高,可以选择将Trace数据存储在内存中。Collector可以使用缓存、内存数据库等方式将Trace数据存储在内存中,并提供相应的查询接口或服务。这样,您可以在内存中进行高效的数据访问和查询。

同类型方案对比

目前有四种主流的链路追踪方案。

Cat优缺点

深度剖析开源分布式监控CAT - 美团技术团队

 Cat是一种常见的链路追踪系统,它具有以下优点和缺点,以及适用的场景:

优点:

  1. 实时性:Cat能够提供实时、低延迟的链路追踪数据,方便开发人员及时了解应用程序的运行情况。

  2. 轻量级:Cat采用了较轻量级的设计,对应用程序的性能影响较小,能够在生产环境中高效运行。

  3. 数据可视化:Cat提供了直观、易懂的可视化界面,能够以图表和图形的形式展示应用程序的调用链路、性能指标等信息。

  4. 集成性:Cat提供了丰富的API和语言支持,可以方便地集成到各种主流的编程语言和框架中,适用于多种应用环境。

缺点:

  1. 扩展性:Cat在处理大规模系统和高并发场景下的扩展性较差,可能会面临一些性能和稳定性的挑战。

  2. 功能有限:相比较其他链路追踪系统(如SkyWalking、Zipkin等),Cat的功能相对有限,更偏重于性能监测和数据展示。

适用场景:

  1. 性能监测和调优:Cat适用于对应用程序的性能进行监测和调优的场景。它能够提供实时的性能指标和调用链路信息,方便开发人员定位瓶颈和优化性能。

  2. 分布式系统:当应用程序拥有复杂的分布式架构和调用链路时,Cat可以帮助了解分布式系统的运行状态和调用关系,方便进行故障定位和监测。

  3. 实时监测:Cat对实时性要求较高,适用于需要实时监测和追踪应用程序的场景,能够及时发现问题并进行相应的处理。

Zipkin优缺点

OpenZipkin · A distributed tracing system

Zipkin是另一种常见的链路追踪系统,它具有以下优点和缺点,以及适用的场景:

优点:

  1. 分布式支持:Zipkin专注于分布式系统的链路追踪,能够准确地捕获和追踪分布式系统中各个服务之间的调用关系和性能指标。

  2. 协议和语言支持:Zipkin支持多种通信协议和编程语言,能够轻松集成到各种不同的服务架构中,例如HTTP、RPC等,并支持Java、Python、Go等多种编程语言。

  3. 高可用性:Zipkin的架构支持多节点部署,可以实现高可用性和容错性。多个Zipkin Collector实例之间可以进行数据同步和负载均衡,确保数据的可靠性和性能。

  4. 数据可视化:Zipkin提供直观的可视化界面,展示应用程序的调用链路、性能指标和异常情况。通过图表、时间线等方式,开发人员可以方便地了解应用程序的运行情况。

缺点:

  1. 数据存储:Zipkin默认使用的存储方式是基于关系型数据库,对一些大规模和高并发的系统可能会面临存储性能和扩展性的挑战。

  2. 配置和部署复杂性:相对于其他链路追踪系统,Zipkin的配置和部署相对复杂,需要一定的技术要求和经验才能正确配置和部署。

适用场景:

  1. 分布式系统:由于Zipkin专注于分布式系统的链路追踪,因此适用于拥有复杂的分布式架构和调用链路的应用程序。它能够帮助分析分布式系统中各个服务之间的调用关系和性能瓶颈。

  2. 跨语言和跨平台:如果您的应用程序由多个不同编程语言和平台组成,Zipkin能够提供跨语言和跨平台的链路追踪功能,方便对整个系统的性能进行监测和优化。

  3. 高可用和容错性:当系统对可用性和容错性要求较高时,Zipkin的多节点部署架构可以满足这些需求。多个Zipkin Collector实例可以共同接收和处理Trace数据,以提高系统的可靠性和性能。

SkyWalking优缺点

Apache SkyWalking

 SkyWalking是一种功能强大的开源链路追踪系统,它具有以下优点和缺点,并且适用于以下场景:

优点:

  1. 分布式支持:SkyWalking专注于分布式系统的链路追踪和性能监测,能够准确捕获和追踪分布式系统中各个服务之间的调用关系和性能指标。

  2. 数据采集和监测丰富性:SkyWalking支持多种数据采集方式,如自动代理、手动埋点、服务网格等,能够灵活地适应不同的应用场景。此外,SkyWalking还提供了丰富的可视化和监测功能,包括事务拓扑图、性能指标图表、报警等,方便开发人员进行系统监测和故障排查。

  3. 跨语言和跨平台:SkyWalking支持多种主流编程语言和平台,如Java、.NET、Node.js、Golang等,适用于各种不同的应用程序。通过SkyWalking的插件和扩展机制,可以轻松扩展和集成到不同的系统中。

  4. 存储和查询扩展性:SkyWalking通过支持多种存储后端,如Elasticsearch、MongoDB、MySQL等,以及通过分布式追踪数据压缩和数据分区等机制,能够支持大规模系统的链路追踪和性能监测。

缺点:

  1. 配置和部署复杂性:相对于其他链路追踪系统,SkyWalking在配置和部署方面可能需要更多的技术要求和经验。由于其功能强大和丰富性,需要花费一定的时间和精力来正确配置和部署。

  2. 学习曲线:对于新的用户来说,SkyWalking可能需要一定的学习曲线。了解其各种特性和功能需要耐心地学习和实践,并熟悉相关文档和资源。

适用场景:

  1. 大规模系统:SkyWalking适用于大规模分布式系统的链路追踪和性能监测。它能够提供实时、准确的调用关系和性能指标,方便定位和解决系统中的性能问题。

  2. 跨语言和跨平台:如果您的应用程序由多个不同编程语言和平台组成,SkyWalking能够提供跨语言和跨平台的链路追踪和性能监测功能,方便对整个系统的性能进行监测和优化。

  3. 数据存储和查询需求:当您对链路追踪数据的存储和查询需求较高时,SkyWalking能够提供丰富的存储和查询扩展性,以满足大规模系统的需求。

需要注意的是,选择适合的链路追踪系统需要根据您的具体需求和系统架构进行评估。如果您需要强大的分布式支持、丰富的数据采集和监测能力以及扩展性高的存储和查询功能,SkyWalking可能是一个很好的选择。

Pinpoint优缺点

Pinpoint首页、文档和下载 - 应用性能管理工具 - OSCHINA - 中文开源技术交流社区

Pinpoint是一种面向Java应用程序的分布式链路追踪系统,它具有以下优点和缺点,并且适用于以下场景:

优点:

  1. 对Java应用程序友好:Pinpoint专注于Java应用程序的链路追踪,提供了丰富的Java Agent和插件,能够轻松集成到Java应用程序中,并提供准确的调用链和性能指标。

  2. 实时监测和调优:Pinpoint能够实时监测和分析Java应用程序的调用链和性能指标,方便开发人员及时发现问题并进行调优。

  3. 数据可视化和分析:Pinpoint提供直观的可视化界面和强大的分析功能,能够以图表、时间线等形式展示应用程序的调用关系和性能数据,并提供多种分析工具和报告。

  4. 轻量级和低侵入性:Pinpoint的Agent对应用程序性能的影响较小,不会对应用程序的运行造成明显的性能损失,并且可以在生产环境中高效运行。

缺点:

  1. 适用范围有限:由于Pinpoint专注于Java应用程序,因此对其他编程语言和平台的支持有限,不适用于跨语言和跨平台的应用程序。

  2. 功能相对有限:相比较其他分布式链路追踪系统(如SkyWalking、Zipkin等),Pinpoint的功能相对有限,更偏重于Java应用程序的监测和调优。

适用场景:

  1. Java应用程序监测和调优:Pinpoint适用于需要对Java应用程序的调用链和性能进行监测和调优的场景。它能够提供实时的性能指标和调用链信息,方便开发人员定位性能瓶颈和优化应用程序。

  2. 实时监测和追踪:当您需要实时监测和追踪Java应用程序的运行状态和调用关系时,Pinpoint可以帮助您及时发现问题并进行相应的处理。

  3. Java应用程序分析和优化:Pinpoint提供强大的数据分析和报告功能,适用于对Java应用程序进行深入分析和优化的场景。

虽然Pinpoint在跨语言和功能丰富性方面有一定限制,但对于Java应用程序的监测和调优是一个不错的选择。在选择链路追踪系统时,请根据具体需求和系统架构进行评估,以找到最适合您的解决方案。

总结方案选用

选择适合的链路追踪系统需要根据以下要素进行评估:

  1. 需求和目标:明确您对链路追踪系统的需求,如是否需要分布式支持、跨语言能力、实时监测等。确定您希望通过链路追踪系统实现的目标,如性能优化、故障排查等。

  2. 系统架构:了解您的应用程序的架构,包括是否为分布式系统、所涉及的编程语言和平台等。根据系统的特点,选择支持相应需求和平台的链路追踪系统。

  3. 功能和扩展性:评估不同链路追踪系统的功能和扩展性。考虑是否需要特定的功能,如实时监测、数据可视化、报警等。同时,了解系统未来的扩展需求,确保所选系统能够满足这些需求。

  4. 配置和部署复杂性:考虑配置和部署链路追踪系统的复杂性。一些系统可能需要更多的技术要求和经验来正确配置和部署。确保您有足够的资源和能力来有效地使用所选系统。

  5. 社区和支持:查看链路追踪系统的社区活跃程度、文档和支持资源。了解系统的更新频率、Bug修复和功能改进的速度,以确保能够得到及时帮助和支持。

综合评估这些要素后,您可以选择适合您需求的链路追踪系统。例如,如果您的系统是分布式的、需要跨语言能力和强大的数据可视化,可考虑使用SkyWalking。如果您的系统是Java应用程序,需求较为简单,可考虑使用Pinpoint。选择一个适合的链路追踪系统将帮助您更好地监测、诊断和优化您的系统。

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

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

相关文章

向量vector模板输出、倒置、求和

运行代码&#xff1a; //向量vector模板输出、倒置、求和 #include"std_lib_facilities.h" //定义vector<double>的输入操作符>> istream& operator>>(istream& is, vector<double>& vv) {double dd0.0;if(is >> dd)vv.p…

【如何训练一个中英翻译模型】LSTM机器翻译模型部署之ncnn(python)(五)

系列文章 【如何训练一个中英翻译模型】LSTM机器翻译seq2seq字符编码&#xff08;一&#xff09; 【如何训练一个中英翻译模型】LSTM机器翻译模型训练与保存&#xff08;二&#xff09; 【如何训练一个中英翻译模型】LSTM机器翻译模型部署&#xff08;三&#xff09; 【如何训练…

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照)

简介 本文将会通过一个简单的场景搭建&#xff0c;介绍如何使用烘焙光照以及相关的注意事项。另外还介绍了Unity内全局光照&#xff08;GI&#xff09;的知识和GI实际在游戏内的表现效果。 Unity关于光照相关的参考文档地址&#xff1a;https://docs.unity.cn/cn/current/Man…

Linux CentOS快速安装VNC并开启服务

以下是在 CentOS 上安装并开启 VNC 服务的步骤&#xff1a; 安装 VNC 服务器软件包。运行以下命令&#xff1a; sudo yum install tigervnc-server 输出 $ sudo yum install tigervnc-server Loaded plugins: fastestmirror, langpacks Repository epel is missing name i…

计算机论文中名词翻译和解释笔记

看论文中一些英文的简写不知道中文啥意思&#xff0c;或者一个名词不知道啥意思。 于是自己做了一个个人总结。 持续更新 目录 SoftmaxDeep Learning(深度学习)循环神经网络(Recurrent Neural Network简称 RNN)损失函数/代价函数(Loss Function)基于手绘草图的三维模型检索(Ske…

【笔记】PyTorch DDP 与 Ring-AllReduce

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 文内若有错误&#xff0c;欢迎指出&#xff01; 今天我想跟大家分享的是一篇虽然有点老&#xff0c;但是很经典的文章&#xff0c;这是一个在分布式训练中会用到的一项技术&#xff0c; 实际上叫ringallreduce。 …

用html+javascript打造公文一键排版系统8:主送机关排版

公文一般在标题和正文之间还有主送机关&#xff0c;相关规定为&#xff1a; 主送机关 编排于标题下空一行位置&#xff0c;居左顶格&#xff0c;回行时仍顶格&#xff0c;最后一个机关名称后标全角冒号。如主送机关名称过多导致公文首页不能显示正文时&#xff0c;应当将主送机…

redis的并发安全问题:redis的事务VSLua脚本

redis为什么会发生并发安全问题&#xff1f; 在redis中&#xff0c;处理的数据都在内存中&#xff0c;数据操作效率极高&#xff0c;单线程的情况下&#xff0c;qps轻松破10w。反而在使用多线程时&#xff0c;为了保证线程安全&#xff0c;采用了一些同步机制&#xff0c;以及多…

20.3 HTML 表格

1. table表格 table标签是HTML中用来创建表格的元素. table标签通常包含以下子标签: - th标签: 表示表格的表头单元格(table header), 用于描述列的标题. - tr标签: 表示表格的行(table row). - td标签: 表示表格的单元格(table data), 通常位于tr标签内, 用于放置单元格中的…

C语言枚举与联合体详解

本篇文章带来枚举与联合体相关知识详细讲解&#xff01; 如果您觉得文章不错&#xff0c;期待你的一键三连哦&#xff0c;你的鼓励是我创作的动力之源&#xff0c;让我们一起加油&#xff0c;一起奔跑&#xff0c;让我们顶峰相见&#xff01;&#xff01;&#xff01; 目录 一…

InnoDB引擎底层逻辑讲解——架构之内存架构

1.InnoDB引擎架构 下图为InnoDB架构图&#xff0c;左侧为内存结构&#xff0c;右侧为磁盘结构。 2.InnoDB内存架构讲解 2.1 Buffer Pool缓冲池 2.2 Change Buffer更改缓冲区 2.3 Adaptive Hash Index自适应hash索引 查看自适应hash索引是否开启&#xff1a; show variable…

Modbus TCP/IP之异常响应

文章目录 一、异常响应二、异常码分析2.1 异常码0x012.2 异常码0x022.3 异常码0x032.4 异常码0x062.5 异常码0x04、0x05等 一、异常响应 对于查询报文&#xff0c;存在以下四种处理反馈&#xff1a; 正常接收&#xff0c;正常处理&#xff0c;返回正常响应报文&#xff1b;因为…

部署问题集合(十八)Windows环境下使用两个Tomcat

下载Tomcat Tomcat镜像下载地址&#xff1a;https://mirrors.cnnic.cn/apache/tomcat/进入如下地址&#xff1a;zip的是压缩版&#xff0c;exe是安装版 修改第二个Tomcat配置文件 第一步&#xff1a;编辑conf/server.xml文件&#xff0c;修改三个端口&#xff0c;有些版本改…

【Rust日报】2023-07-28 使用 Cargo-PGO 优化 Rust 程序

使用 Cargo-PGO 优化 Rust 程序 去年&#xff0c;作者致力于改进用于构建 Rust 编译器的配置文件引导优化 (PGO) 工作流程。在这样做的过程中&#xff0c;虽然 PGO 对于 Rust 工作得很好&#xff0c;但它并不像希望的那样易于使用和发现。这促使我创建了 cars-pgo&#xff0c;这…

【雕爷学编程】Arduino动手做(175)---机智云ESP8266开发板模块2

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

【Vue3】递归组件

1. 递归组件mock数据 App.vue <template><div><Tree :data"data"></Tree></div> </template><script setup lang"ts"> import { reactive } from vue; import Tree from ./components/Tree.vue; interface Tr…

CentOS 8 上安装 Nginx

Nginx是一款高性能的开源Web服务器和反向代理服务器&#xff0c;以其轻量级和高效能而广受欢迎。在本教程中&#xff0c;我们将学习在 CentOS 8 操作系统上安装和配置 Nginx。 步骤 1&#xff1a;更新系统 在安装任何软件之前&#xff0c;让我们先更新系统的软件包列表和已安…

读发布!设计与部署稳定的分布式系统(第2版)笔记26_安全性上

1. 安全问题 1.1. 系统违规并不总是涉及数据获取&#xff0c;有时会出现植入假数据&#xff0c;例如假身份或假运输文件 1.2. 必须在整个开发过程中持续地把安全内建到系统里&#xff0c;而不是把安全像胡椒面那样在出锅前才撒到系统上 2. OWASP 2.1. Open Web Application…

Godot 4 源码分析 - 动态导入图片文件

用Godot 4尝试编一个电子书软件&#xff0c;初步效果已经出来&#xff0c;并且通过管道通信接口可以获取、设置属性、调用函数&#xff0c;貌似能处理各种事宜了。 其实不然&#xff0c;外因通过内因起作用&#xff0c;如果没把里面搞明白&#xff0c;功能没有开放出来&#x…

【SpringCloud Alibaba】(六)使用 Sentinel 实现服务限流与容错

今天&#xff0c;我们就使用 Sentinel 实现接口的限流&#xff0c;并使用 Feign 整合 Sentinel 实现服务容错的功能&#xff0c;让我们体验下微服务使用了服务容错功能的效果。 因为内容仅仅围绕着 SpringCloud Alibaba技术栈展开&#xff0c;所以&#xff0c;这里我们使用的服…