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

news2024/11/23 15:13:12

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。选择一个适合的链路追踪系统将帮助您更好地监测、诊断和优化您的系统。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

ncnn:https://github.com/Tencent/ncnn 1、.h5模型保存为TFSaveModel格式 import tensorflow as tf from keras.models import load_model# 加载Keras模型 model load_model(encoder_model.h5)# 转换为SavedModel类型 tf.saved_model.save(model, TFSaveModel)2、…

ssm 图书借阅管理系统 【纯干货分享,免费领源码06780】

大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在图书馆的要求下,开发一款整体式结构的图书借阅管理系统&#xf…

5.44 综合案例2.0-矩阵键盘信息输入上传-OLED屏幕

综合案例2.0-矩阵键盘信息输入上传-OLED屏幕 案例说明1、应用场景2、M320矩阵引脚说明3、接线说明 搭建云平台环境1.添加设备2.创建设备类型3.功能定义(创建物模型) 代码1.更改MQTT信息 测试 案例说明 矩阵键盘输入信息显示在OLED显示屏上。按确定键可以…

Django 图书管理系统

一、功能及页面设计 二、页面展示 (1)首页 (2)注册 (3)登录 (4)普通用户登录 4.1查看图书页面 4.2查看图书详情页 4.3修改密码 (5)管理员登录 5.1添加图书 5.2添加图片 三、代码展示 因为代码太多不好一个个展示 所以需要源码的小伙伴可以找我要代码 感谢三连支持&#xff0…

云计算需求激增带来的基础设施挑战及解决方案

云计算的指数级增长迅速改变了我们消费和存储数字信息的方式。随着企业和个人越来越依赖基于云的服务和数据存储,对支持这些服务的强大且可扩展的基础设施的需求已达到前所未有的水平。 云计算需求的快速增长 我们的日常生活越来越多地被新技术所渗透。流媒体服务、…

剑指 Offer 29. 顺时针打印矩阵 / LeetCode 54. 螺旋矩阵(模拟)

题目: 链接:剑指 Offer 29. 顺时针打印矩阵;LeetCode 54. 螺旋矩阵 难度:中等 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入&#xff1a…

Fiddler Everywhere(TTP调试抓包工具) for Mac苹果电脑版

Fiddler Everywhere for Mac版是Mac电脑上的一款跨平台的HTTP调试抓包工具,Fiddler Everywhere for Mac能够记录客户端与服务器之间的所有HTTP(S)通信,支持对包进行监视、分析、设置断点、甚至修改请求/响应数据等操作。 适用于任…

2009年上半年 软件设计师 上午试卷2

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

Golang GORM 模型定义

模型定义 参考文档:https://gorm.io/zh_CN/docs/models.html 模型一般都是普通的 Golang 的结构体,Go的基本数据类型,或者指针。 模型是标准的struct,由Go的基本数据类型、实现了Scanner和Valuer接口的自定义类型及其指针或别名组成&#x…

安全初级:字符编码

字符编码 字符编码:是一种映射规则,根据映射规则将字符映射成其他形式的数据在计算机中存储和传输。 常用的编码 编码制定时间作用ASCII1967表示英语及西欧语言GB23121980国家简体中文字符集,兼容ASCIIUnicode1991国际标准化组织统一标准字…

【C++】继承和多态高频面试题整理

文章目录 1. 选择题2. 问答题2.1 什么是多态?2.2 什么是重载、重写(覆盖)、重定义(隐藏)?2.3 多态的实现原理?2.4 inline函数可以是虚函数吗?2.5 静态成员可以是虚函数吗?2.6 构造函数可以是虚函数吗?2.7 析…

华为云零代码平台AstroZero新手操作指南-3分钟体验创建培训报名表

华为云Astro轻应用Astro Zero是华为云为行业客户、合作伙伴、开发者量身打造的低代码/零代码应用开发平台,提供全场景可视化开发能力和端到端部署能力,可快速搭建行业和大型企业级应用并沉淀复用行业资产,加速行业数字化。 在AstroZero上&am…

el-tabel导出excel表格

1、安装插件 npm install file-saver --save npm install xlsx --save 2、引入插件 import FileSaver from "file-saver"; import * as XLSX from xlsx; 3、在tabel中添加ref属性和导出方法 4、添加方法 exportExcel (excelName) {try {const $e this.$refs[repo…

DFS之剪枝与优化--小猫爬山

思路&#xff1a;对小猫的数量和车箱数进行bfs&#xff0c;一旦小猫的数量达到n&#xff0c;就统计ans的数量&#xff0c;如果当前车的剩余重量无法再承受任意一个猫的重量&#xff0c;那么我们将车辆数1来保证小猫能够下山。 #include<bits/stdc.h> using namespace std…

ChatGPT使用技巧和实践

在工作使用当中&#xff0c;需要使用到GPT&#xff0c;目前使用的是浏览器端的WeTab。 下面是给AI的提问和交互 请写出HashMap和Hashtable的区别 HashMap和Hashtable是Java中两种常用的哈希表实现&#xff0c;它们在功能和使用上有一些区别。线程安全性&#xff1a;HashMap是…

如何利用在线培训考试系统提升员工技能?

在如今竞争激烈的商业环境中&#xff0c;不断提升员工的技能和知识变得至关重要。为了满足这一需求&#xff0c;越来越多的企业开始采用在线培训考试系统。借助这种系统&#xff0c;企业可以以有效和高效的方式提供培训&#xff0c;并确保员工能够学到最新的知识和技能。 1. 灵…

3.2 队列

定义: 队列是一种插入元素只能在一端进行, 删除元素只能在另一端进行的线性表. 所谓队列是线性表, 是指队列的逻辑结构属于线性表, 只不过在操作上加了一些约束. 队列可以插入元素的一端叫做队尾(Rear), 可以删除元素的一端叫做队头(Front). 队列是一种先进先出的结构. First I…

vue创建脚手架项目启动

vue创建脚手架项目&启动 1、创建项目2、运行项目 1、创建项目 vue create vuecli-demo说明这里使用vue2项目 2、运行项目 cd vuecli-demo yarn serve访问 http://localhost:8080/

springboot()—— 集成redis

1、新建一个springboot项目 2、添加redis依赖包 可以在新建项目的时候就选上 也可以建完项目以后手动导入pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </d…

[uni-app] 微信小程序 - 组件找不到/导入报错 (分包问题导致)

文章目录 问题表现问题原因 问题表现 切换了个路径下的组件, 导入失败, 尝试了清缓存\重启\删项目等一些列操作均无效 上面两个路径中, 都存在一模一样的videItem.vue Main路径是可以导入的 Main路径是无法导入的 问题原因 后来发现, 是 分包的问题导致. 我们先来假设一个场…