SkyWalking 文档中文版(社区提供) (skyapm.github.io)https://skyapm.github.io/document-cn-translation-of-skywalking/
SkyWalking-基本概念
SkyWalking链路追踪是一个用于分布式系统的性能监控工具,它帮助开发人员了解系统中各组件之间的调用关系和性能信息。通过追踪每个请求从一个组件到另一个组件的路径,SkyWalking可以提供实时的链路信息,包括请求的路径、耗时和错误信息等。
这个工具的基本概念是通过在分布式系统中的各个组件中插入Agent来追踪请求。这些Agent可以通过自动和手动的方式添加到各个组件中。一旦Agent被添加,它们会自动收集和发送关于请求的信息,然后将这些信息汇总到一个集中的位置进行分析和可视化展示。
SkyWalking链路追踪还提供了一些其他功能,例如性能指标的收集和展示、错误告警、拓展性和可扩展性等。这使得开发人员能够更好地理解系统的运行情况,发现潜在的性能问题,并及时进行调优和修复。
总的来说,SkyWalking链路追踪是一个有助于开发人员监控和优化分布式系统性能的工具,它提供了实时的链路信息和可视化展示,有助于提高系统的可靠性和性能。
SkyWalking-架构体系
SkyWalking的架构体系由以下几个核心组件组成:
-
Collector(收集器):Collector是SkyWalking的核心组件之一,负责接收来自各个Agent的追踪数据,并将其存储到数据存储器中。Collector提供了一个统一的接口,通过这个接口可以获取链路追踪数据,以便进行后续的分析和展示。
-
Storage(存储器):Storage负责接收Collector送来的追踪数据,并将其持久化存储。存储器可以使用各种类型的数据库,如关系型数据库、NoSQL数据库或分布式存储系统等。
-
UI(用户界面):UI是SkyWalking提供的可视化界面,用于展示追踪数据的各种指标和图表。开发人员可以通过UI实时监控系统的性能,并查看请求的路径、耗时和异常信息等。
-
Agent(代理):Agent是SkyWalking在分布式系统中用于追踪请求的关键组件。Agent被插入到各个组件中,通过自动或手动的方式与这些组件集成。Agent负责收集各个组件的性能指标和追踪数据,并将其发送给Collector进行处理。
-
Probe/Instrumentation(探针/仪表):Probe/Instrumentation是用于追踪应用程序内部方法调用和性能的组件。通过在代码中插入探针或仪表,开发人员可以在应用程序内部收集更详细的性能指标,并将其发送给Agent进行处理。
这些组件相互协作,构成了SkyWalking的架构体系。它们共同工作,帮助开发人员实现对分布式系统的性能监控和优化。
工作原理
分布式链路追踪系统,链路的追踪大体流程如下:
- Agent 收集 Trace 数据。
- Agent 发送 Trace 数据给 Collector 。
- Collector 接收 Trace 数据。
- 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的存储方式需要根据您的具体需求和系统架构来选择适合的存储方式。以下是一些常用的存储方式和配置方法:
-
存储到数据库:您可以将Trace数据存储到关系型数据库(如MySQL)或文档型数据库(如Elasticsearch)中。配置存储到数据库时,您需要提供数据库的连接信息和认证信息,并创建相应的表或索引用于存储Trace数据。您可以在Collector的配置文件中进行相应的参数设置。
-
存储到文件系统:您可以将Trace数据存储到本地文件系统或分布式文件系统(如Hadoop HDFS)中。配置存储到文件系统时,您需要指定存储路径和文件命名规则等配置参数。Collector会将Trace数据按照指定的格式写入到文件中,以供后续查询和分析。
-
存储到消息队列:您可以将Trace数据存储到消息队列(如Kafka、RabbitMQ)中。配置存储到消息队列时,您需要提供消息队列的连接信息和授权信息,并指定相应的主题或队列名称。Collector将Trace数据发送到消息队列中,供后续进行消费和处理。
-
存储到内存:如果您的系统对实时性要求很高,可以选择将Trace数据存储在内存中。Collector可以使用缓存、内存数据库等方式将Trace数据存储在内存中,并提供相应的查询接口或服务。这样,您可以在内存中进行高效的数据访问和查询。
同类型方案对比
目前有四种主流的链路追踪方案。
Cat优缺点
深度剖析开源分布式监控CAT - 美团技术团队
Cat是一种常见的链路追踪系统,它具有以下优点和缺点,以及适用的场景:
优点:
-
实时性:Cat能够提供实时、低延迟的链路追踪数据,方便开发人员及时了解应用程序的运行情况。
-
轻量级:Cat采用了较轻量级的设计,对应用程序的性能影响较小,能够在生产环境中高效运行。
-
数据可视化:Cat提供了直观、易懂的可视化界面,能够以图表和图形的形式展示应用程序的调用链路、性能指标等信息。
-
集成性:Cat提供了丰富的API和语言支持,可以方便地集成到各种主流的编程语言和框架中,适用于多种应用环境。
缺点:
-
扩展性:Cat在处理大规模系统和高并发场景下的扩展性较差,可能会面临一些性能和稳定性的挑战。
-
功能有限:相比较其他链路追踪系统(如SkyWalking、Zipkin等),Cat的功能相对有限,更偏重于性能监测和数据展示。
适用场景:
-
性能监测和调优:Cat适用于对应用程序的性能进行监测和调优的场景。它能够提供实时的性能指标和调用链路信息,方便开发人员定位瓶颈和优化性能。
-
分布式系统:当应用程序拥有复杂的分布式架构和调用链路时,Cat可以帮助了解分布式系统的运行状态和调用关系,方便进行故障定位和监测。
-
实时监测:Cat对实时性要求较高,适用于需要实时监测和追踪应用程序的场景,能够及时发现问题并进行相应的处理。
Zipkin优缺点
OpenZipkin · A distributed tracing system
Zipkin是另一种常见的链路追踪系统,它具有以下优点和缺点,以及适用的场景:
优点:
-
分布式支持:Zipkin专注于分布式系统的链路追踪,能够准确地捕获和追踪分布式系统中各个服务之间的调用关系和性能指标。
-
协议和语言支持:Zipkin支持多种通信协议和编程语言,能够轻松集成到各种不同的服务架构中,例如HTTP、RPC等,并支持Java、Python、Go等多种编程语言。
-
高可用性:Zipkin的架构支持多节点部署,可以实现高可用性和容错性。多个Zipkin Collector实例之间可以进行数据同步和负载均衡,确保数据的可靠性和性能。
-
数据可视化:Zipkin提供直观的可视化界面,展示应用程序的调用链路、性能指标和异常情况。通过图表、时间线等方式,开发人员可以方便地了解应用程序的运行情况。
缺点:
-
数据存储:Zipkin默认使用的存储方式是基于关系型数据库,对一些大规模和高并发的系统可能会面临存储性能和扩展性的挑战。
-
配置和部署复杂性:相对于其他链路追踪系统,Zipkin的配置和部署相对复杂,需要一定的技术要求和经验才能正确配置和部署。
适用场景:
-
分布式系统:由于Zipkin专注于分布式系统的链路追踪,因此适用于拥有复杂的分布式架构和调用链路的应用程序。它能够帮助分析分布式系统中各个服务之间的调用关系和性能瓶颈。
-
跨语言和跨平台:如果您的应用程序由多个不同编程语言和平台组成,Zipkin能够提供跨语言和跨平台的链路追踪功能,方便对整个系统的性能进行监测和优化。
-
高可用和容错性:当系统对可用性和容错性要求较高时,Zipkin的多节点部署架构可以满足这些需求。多个Zipkin Collector实例可以共同接收和处理Trace数据,以提高系统的可靠性和性能。
SkyWalking优缺点
Apache SkyWalking
SkyWalking是一种功能强大的开源链路追踪系统,它具有以下优点和缺点,并且适用于以下场景:
优点:
-
分布式支持:SkyWalking专注于分布式系统的链路追踪和性能监测,能够准确捕获和追踪分布式系统中各个服务之间的调用关系和性能指标。
-
数据采集和监测丰富性:SkyWalking支持多种数据采集方式,如自动代理、手动埋点、服务网格等,能够灵活地适应不同的应用场景。此外,SkyWalking还提供了丰富的可视化和监测功能,包括事务拓扑图、性能指标图表、报警等,方便开发人员进行系统监测和故障排查。
-
跨语言和跨平台:SkyWalking支持多种主流编程语言和平台,如Java、.NET、Node.js、Golang等,适用于各种不同的应用程序。通过SkyWalking的插件和扩展机制,可以轻松扩展和集成到不同的系统中。
-
存储和查询扩展性:SkyWalking通过支持多种存储后端,如Elasticsearch、MongoDB、MySQL等,以及通过分布式追踪数据压缩和数据分区等机制,能够支持大规模系统的链路追踪和性能监测。
缺点:
-
配置和部署复杂性:相对于其他链路追踪系统,SkyWalking在配置和部署方面可能需要更多的技术要求和经验。由于其功能强大和丰富性,需要花费一定的时间和精力来正确配置和部署。
-
学习曲线:对于新的用户来说,SkyWalking可能需要一定的学习曲线。了解其各种特性和功能需要耐心地学习和实践,并熟悉相关文档和资源。
适用场景:
-
大规模系统:SkyWalking适用于大规模分布式系统的链路追踪和性能监测。它能够提供实时、准确的调用关系和性能指标,方便定位和解决系统中的性能问题。
-
跨语言和跨平台:如果您的应用程序由多个不同编程语言和平台组成,SkyWalking能够提供跨语言和跨平台的链路追踪和性能监测功能,方便对整个系统的性能进行监测和优化。
-
数据存储和查询需求:当您对链路追踪数据的存储和查询需求较高时,SkyWalking能够提供丰富的存储和查询扩展性,以满足大规模系统的需求。
需要注意的是,选择适合的链路追踪系统需要根据您的具体需求和系统架构进行评估。如果您需要强大的分布式支持、丰富的数据采集和监测能力以及扩展性高的存储和查询功能,SkyWalking可能是一个很好的选择。
Pinpoint优缺点
Pinpoint首页、文档和下载 - 应用性能管理工具 - OSCHINA - 中文开源技术交流社区
Pinpoint是一种面向Java应用程序的分布式链路追踪系统,它具有以下优点和缺点,并且适用于以下场景:
优点:
-
对Java应用程序友好:Pinpoint专注于Java应用程序的链路追踪,提供了丰富的Java Agent和插件,能够轻松集成到Java应用程序中,并提供准确的调用链和性能指标。
-
实时监测和调优:Pinpoint能够实时监测和分析Java应用程序的调用链和性能指标,方便开发人员及时发现问题并进行调优。
-
数据可视化和分析:Pinpoint提供直观的可视化界面和强大的分析功能,能够以图表、时间线等形式展示应用程序的调用关系和性能数据,并提供多种分析工具和报告。
-
轻量级和低侵入性:Pinpoint的Agent对应用程序性能的影响较小,不会对应用程序的运行造成明显的性能损失,并且可以在生产环境中高效运行。
缺点:
-
适用范围有限:由于Pinpoint专注于Java应用程序,因此对其他编程语言和平台的支持有限,不适用于跨语言和跨平台的应用程序。
-
功能相对有限:相比较其他分布式链路追踪系统(如SkyWalking、Zipkin等),Pinpoint的功能相对有限,更偏重于Java应用程序的监测和调优。
适用场景:
-
Java应用程序监测和调优:Pinpoint适用于需要对Java应用程序的调用链和性能进行监测和调优的场景。它能够提供实时的性能指标和调用链信息,方便开发人员定位性能瓶颈和优化应用程序。
-
实时监测和追踪:当您需要实时监测和追踪Java应用程序的运行状态和调用关系时,Pinpoint可以帮助您及时发现问题并进行相应的处理。
-
Java应用程序分析和优化:Pinpoint提供强大的数据分析和报告功能,适用于对Java应用程序进行深入分析和优化的场景。
虽然Pinpoint在跨语言和功能丰富性方面有一定限制,但对于Java应用程序的监测和调优是一个不错的选择。在选择链路追踪系统时,请根据具体需求和系统架构进行评估,以找到最适合您的解决方案。
总结方案选用
选择适合的链路追踪系统需要根据以下要素进行评估:
-
需求和目标:明确您对链路追踪系统的需求,如是否需要分布式支持、跨语言能力、实时监测等。确定您希望通过链路追踪系统实现的目标,如性能优化、故障排查等。
-
系统架构:了解您的应用程序的架构,包括是否为分布式系统、所涉及的编程语言和平台等。根据系统的特点,选择支持相应需求和平台的链路追踪系统。
-
功能和扩展性:评估不同链路追踪系统的功能和扩展性。考虑是否需要特定的功能,如实时监测、数据可视化、报警等。同时,了解系统未来的扩展需求,确保所选系统能够满足这些需求。
-
配置和部署复杂性:考虑配置和部署链路追踪系统的复杂性。一些系统可能需要更多的技术要求和经验来正确配置和部署。确保您有足够的资源和能力来有效地使用所选系统。
-
社区和支持:查看链路追踪系统的社区活跃程度、文档和支持资源。了解系统的更新频率、Bug修复和功能改进的速度,以确保能够得到及时帮助和支持。
综合评估这些要素后,您可以选择适合您需求的链路追踪系统。例如,如果您的系统是分布式的、需要跨语言能力和强大的数据可视化,可考虑使用SkyWalking。如果您的系统是Java应用程序,需求较为简单,可考虑使用Pinpoint。选择一个适合的链路追踪系统将帮助您更好地监测、诊断和优化您的系统。