全网最全的Skywalking链路追踪

这篇具有很好参考价值的文章主要介绍了全网最全的Skywalking链路追踪。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面:笔者发现目前关于Skywalking的内容很是零散,没有成型的内容,笔者在项目中使用到Skywalking进行埋点分析,下面分三篇来介绍下Skywalking,分别是Skywalking基本知识,Skywalking基于docke安装,SpringBoot工程集成Skywalking

Skywalking介绍

1 服务监控三要素

服务监控需要满足的三要素分别如下:

  • 日志监控
  • 指标监控
  • 请求链路追踪

服务监控只要能满足这三个要素,基本就能实现我们想要的监控效果,我们来看看为什么服务监控需要满足这三要素。

文章来源地址https://www.toymoban.com/news/detail-403159.html

1.1 微服务监控问题分析

全网最全的Skywalking链路追踪

我们在学习Skywalking之前,先来分析一个电商项目中的案例,如上图:

1:用户请求调用微服务网关,请求到达后端服务。

2:此时用户有可能调用订单服务,订单服务有可能调用用户服务,用户服务有可能调用商品服务,商品服务有可能调用用户服务,用户服务有可能调用订单服务等。

3:在调用过程中存在很多请求跟踪问题,例如如果报错了,哪个环节出错了?这个问题如果不解决,很难快速定位bug。

通过我们刚才分析,在微服务场景下,服务之间调用如果不解决调用跟踪问题,就很难排查错误,很难分析服务健康状态。

如果我们要解决调用跟踪、了解服务健康状态,又该如何实现?

1.2 微服务跟踪要素分析

全网最全的Skywalking链路追踪

我们可以通过日志(Logging)记录调用链路信息,通过日志统计时间窗口下的指标数据(Metrics),如果服务之间的调用可以通过日志分析出来,那也就解决了调用流程跟踪,也就是链路追踪(Tracing)了。

我们分别来看看LoggingMetricsTracing概念:

  • Logging 就是记录系统行为的离散事件,例如,服务在处理某个请求时打印的错误日志,我们可以将这些日志信息记录到 ElasticSearch 或是其他存储中,然后通过 Kibana 或是其他工具来分析这些日志了解服务的行为和状态。大多数情况下,日志记录的数据很分散,并且相互独立,比如错误日志、请求处理过程中关键步骤的日志等等。
  • Metrics 是系统在一段时间内某一方面的某个度量,例如,电商系统在一分钟内的请求次数。我们常见的监控系统中记录的数据都属于这个范畴,例如 PromethusOpen-Falcon 等,这些监控系统最终给运维人员展示的是一张张二维的折线图。Metrics 是可以聚合的,例如,为电商系统中每个 HTTP 接口添加一个计数器,计算每个接口的 QPS,之后我们就可以通过简单的加和计算得到系统的总负载情况。
  • Tracing 即我们常说的分布式链路追踪。在微服务架构系统中一个请求会经过很多服务处理,调用链路会非常长,要确定中间哪个服务出现异常是非常麻烦的一件事。通过分布式链路追踪,运维人员就可以构建一个请求的视图,这个视图上展示了一个请求从进入系统开始到返回响应的整个流程。这样,就可以从中了解到所有服务的异常情况、网络调用,以及系统的性能瓶颈等。

1.3 什么是链路追踪

谷歌在 2010 年 4 月发表了一篇论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》介绍了分布式追踪的概念,之后很多互联网公司都开始根据这篇论文打造自己的分布式链路追踪系统。前面提到的 APM 系统的核心技术就是分布式链路追踪。

OpenTracing提供了一个标准的、与供应商无关的框架,这意味着如果开发者想要尝试一种不同的分布式追踪系统,开发者只需要简单地修改Tracer配置即可,而不需要替换整个分布式追踪系统。

OpenTracing API目前支持的语言众多:

全网最全的Skywalking链路追踪

1.4 链路追踪方案

下面通过官方的一个示例简单介绍说明什么是 Tracing,把Tracing学完后,更有助于大家运用Skywalking UI进行数据分析。

在一个分布式系统中,追踪一个事务或者调用流程,可以用下图方式描绘出来。这类流程图可以看清各组件的组合关系,但它并不能看出一次调用触发了哪个组件调用、什么时间调用、是串行调用还是并行调用。

全网最全的Skywalking链路追踪

一种更有效的展现方式就是下图这样,这是一个典型的 trace 视图,这种展现方式增加显示了执行时间的上下文,相关服务间的层次关系,进程或者任务的串行或并行调用关系。这样的视图有助于发现系统调用的关键路径。通过关注关键路径的执行过程,开发团队就可以专注于优化路径中的关键服务,最大幅度的提升系统性能。例如下图中,我们可以看到请求串行的调用了授权服务、订单服务以及资源服务,在资源服务中又并行的执行了三个子任务。我们还可以看到,在这整个请求的生命周期中,资源服务耗时是最长的。

全网最全的Skywalking链路追踪

1.5 OpenTracing

学好OpenTracing,更有助于我们运用Skywalking UI进行数据分析。

Trace

一个 Trace 代表一个事务、请求或是流程在分布式系统中的执行过程。OpenTracing 中的一条 Trace 被认为是一个由多个 Span 组成的有向无环图( DAG 图),一个 Span 代表系统中具有开始时间和执行时长的逻辑单元,Span 一般会有一个名称,一条 Trace 中 Span 是首尾连接的。

Span

Span 代表系统中具有开始时间和执行时长的逻辑单元,Span 之间通过嵌套或者顺序排列建立逻辑因果关系。

每个 Span 中可以包含以下的信息:

  • 操作名称:例如访问的具体 RPC 服务,访问的 URL 地址等;
  • 起始时间2021-1-25 22:00:00
  • 结束时间2021-1-30 22:00:00
  • Span Tag:一组键值对构成的Span标签集合,其中键必须为字符串类型,值可以是字符串、bool 值或者数字;
  • Span Log:一组 Span 的日志集合;
  • SpanContext:Trace 的全局上下文信息;
  • References:Span 之间的引用关系,下面详细说明 Span 之间的引用关系;

在一个 Trace 中,一个 Span 可以和一个或者多个 Span 间存在因果关系。目前,OpenTracing 定义了 ChildOf 和 FollowsFrom 两种 Span 之间的引用关系。这两种引用类型代表了子节点和父节点间的直接因果关系。

  • ChildOf 关系:一个 Span 可能是一个父级 Span 的孩子,即为 ChildOf 关系。下面这些情况会构成 ChildOf 关系:

    • 一个 HTTP 请求之中,被调用的服务端产生的 Span,与发起调用的客户端产生的 Span,就构成了 ChildOf 关系;
    • 一个 SQL Insert 操作的 Span,和 ORM 的 save 方法的 Span 构成 ChildOf 关系。

很明显,上述 ChildOf 关系中的父级 Span 都要等待子 Span 的返回,子 Span 的执行时间影响了其所在父级 Span 的执行时间,父级 Span 依赖子 Span 的执行结果。除了串行的任务之外,我们的逻辑中还有很多并行的任务,它们对应的 Span 也是并行的,这种情况下一个父级 Span 可以合并所有子 Span 的执行结果并等待所有并行子 Span 结束。

FollowsFrom 关系:在分布式系统中,一些上游系统(父节点)不以任何方式依赖下游系统(子节点)的执行结果,例如,上游系统通过消息队列向下游系统发送消息。这种情况下,下游系统对应的子 Span 和上游系统对应的父级 Span 之间是 FollowsFrom 关系。

Logs

每个 Span 可以进行多次 Logs 操作,每一次 Logs 操作,都需要带一个时间戳,以及一个可选的附加信息。

Tags

每个 Span 可以有多个键值对形式的 Tags,Tags 是没有时间戳的,只是为 Span 添加一些简单解释和补充信息。

SpanContext 和 Baggage

SpanContext 表示进程边界,在跨进调用时需要将一些全局信息,例如,TraceId、当前 SpanId 等信息封装到 Baggage 中传递到另一个进程(下游系统)中。

Baggage 是存储在 SpanContext 中的一个键值对集合。它会在一条 Trace 中全局传输,该 Trace 中的所有 Span 都可以获取到其中的信息。

需要注意的是,由于 Baggage 需要跨进程全局传输,就会涉及相关数据的序列化和反序列化操作,如果在 Baggage 中存放过多的数据,就会导致序列化和反序列化操作耗时变长,使整个系统的 RPC 的延迟增加、吞吐量下降。

虽然 Baggage 与 Span Tags 一样,都是键值对集合,但两者最大区别在于 Span Tags 中的信息不会跨进程传输,而 Baggage 需要全局传输。因此,OpenTracing 要求实现提供 Inject 和 Extract 两种操作,SpanContext 可以通过 Inject 操作向 Baggage 中添加键值对数据,通过 Extract 从 Baggage 中获取键值对数据。

核心接口语义

OpenTracing 希望各个实现平台能够根据上述的核心概念来建模实现,不仅如此,OpenTracing 还提供了核心接口的描述,帮助开发人员更好的实现 OpenTracing 规范。

  • Span 接口

Span接口必须实现以下的功能:

    • 获取关联的 SpanContext:通过 Span 获取关联的 SpanContext 对象。
    • 关闭(Finish)Span:完成已经开始的 Span。
    • 添加 Span Tag:为 Span 添加 Tag 键值对。
    • **添加 Log:**为 Span 增加一个 Log 事件。
    • **添加 Baggage Item:**向 Baggage 中添加一组键值对。
    • **获取 Baggage Item:**根据 Key 获取 Baggage 中的元素。
  • SpanContext 接口

SpanContext 接口必须实现以下功能,用户可以通过 Span 实例或者 Tracer 的 Extract 能力获取 SpanContext 接口实例。

  • Tracer 接口

    Tracer 接口必须实现以下功能:

  • **创建 Span:**创建新的 Span。

  • 注入 SpanContext:主要是将跨进程调用携带的 Baggage 数据记录到当前 SpanContext 中。

  • 提取 SpanContext ,主要是将当前 SpanContext 中的全局信息提取出来,封装成 Baggage 用于后续的跨进程调用。

2 Skywalking介绍

当前主流的分布式链路追踪系统也并非只有Skywalking,还有很多开源的分布式链路追踪系统,但维度Skywalking异常火爆。

2.1 主流APM系统

我们前面提到了APM系统,APM 系统(Application Performance Management,即应用性能管理)是对企业的应用系统进行实时监控,实现对应用性能管理和故障定位的系统化解决方案,在运维中常用。

  • CAT(开源): 由国内美团点评开源的,基于 Java 语言开发,目前提供 Java、C/C++、Node.js、Python、Go 等语言的客户端,监控数据会全量统计。国内很多公司在用,例如美团点评、携程、拼多多等。CAT 需要开发人员手动在应用程序中埋点,对代码侵入性比较强。
  • Zipkin(开源): 由 Twitter 公司开发并开源,Java 语言实现。侵入性相对于 CAT 要低一点,需要对web.xml 等相关配置文件进行修改,但依然对系统有一定的侵入性。Zipkin 可以轻松与 Spring Cloud 进行集成,也是 Spring Cloud 推荐的 APM 系统。
  • Pinpoint(开源): 韩国团队开源的 APM 产品,运用了字节码增强技术,只需要在启动时添加启动参数即可实现 APM 功能,对代码无侵入。目前支持 Java 和 PHP 语言,底层采用 HBase 来存储数据,探针收集的数据粒度非常细,但性能损耗较大,因其出现的时间较长,完成度也很高,文档也较为丰富,应用的公司较多。
  • SkyWalking(开源): 国人开源的产品,2019 年 4 月 17 日 SkyWalking 从 Apache 基金会的孵化器毕业成为顶级项目。目前 SkyWalking 支持 Java、.Net、Node.js 等探针,数据存储支持MySQL、ElasticSearch等。
  • 还有很多不开源的 APM 系统,例如,淘宝鹰眼、Google Dapper 等等。

我们将学习Skywalking,Skywalking有很多优秀特性。SkyWalking 对业务代码无侵入,性能表现优秀,SkyWalking 增长势头强劲,社区活跃,中文文档齐全,支持多语言探针, SkyWalking 支持Dubbo、gRPC、SOFARPC 等很多框架。

2.2 Skywalking介绍

全网最全的Skywalking链路追踪

Skywalking是一个可观测性分析平台和应用性能管理系统,它也是基于OpenTracing规范、开源的AMP系统。Skywalking提供分布式跟踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。支持Java .Net Core, PHP, NodeJS, Golang, LUA, c++代理。支持Istio +特使服务网格

我们在学习Skywalking之前,可以先访问官方提供的控制台演示

演示地址:http://demo.skywalking.apache.org/ 账号:skywalking 密码:skywalking

全网最全的Skywalking链路追踪

2.3 Skywalking核心功能

SkyWalking 核心功能:

  • 服务、服务实例、端点指标分析。
  • 服务拓扑图分析
  • 服务、服务实例和端点(Endpoint)SLA 分析
  • 慢查询检测
  • 告警

SkyWalking 特点:

  • 多语言自动探针,支持 Java、.NET Code 等多种语言。
  • 为多种开源项目提供了插件,为 Tomcat、 HttpClient、Spring、RabbitMQ、MySQL 等常见基础设施和组件提供了自动探针。
  • 微内核 + 插件的架构,存储、集群管理、使用插件集合都可以进行自由选择。
  • 支持告警。
  • 优秀的可视化效果。

2.4 Skywalking架构

全网最全的Skywalking链路追踪

SkyWalking 分为三个核心部分:

  • Agent(探针)Agent 运行在各个服务实例中,负责采集服务实例的 TraceMetrics 等数据,然后通过 gRPC 方式上报给 SkyWalking 后端。

  • OAPSkyWalking 的后端服务,其主要责任有两个。

    • 一个是负责接收 Agent 上报上来的 TraceMetrics 等数据,交给 Analysis Core (涉及 SkyWalking OAP 中的多个模块)进行流式分析,最终将分析得到的结果写入持久化存储中。SkyWalking 可以使用 ElasticSearch、H2、MySQL 等作为其持久化存储,一般线上使用 ElasticSearch 集群作为其后端存储。
    • 另一个是负责响应 SkyWalking UI 界面发送来的查询请求,将前面持久化的数据查询出来,组成正确的响应结果返回给 UI 界面进行展示。
  • UI 界面:SkyWalking 前后端进行分离,该 UI 界面负责将用户的查询操作封装为 GraphQL 请求提交给 OAP 后端触发后续的查询操作,待拿到查询结果之后会在前端负责展示。

到了这里,关于全网最全的Skywalking链路追踪的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 链路追踪Skywalking应用实战

    2023年09月05日
    浏览(44)
  • 分布式链路追踪专栏,分布式链路追踪:Skywalking集群管理设计

    SkyWalking 是一个开源 APM 系统,包括针对 Cloud Native 体系结构中的分布式系统的监视,跟踪,诊断功能。核心功能如下: 服务、服务实例、端点指标分析; 根本原因分析,在运行时分析代码; 服务拓扑图分析; 服务,服务实例和端点依赖性分析; 检测到慢速服务和端点; 性

    2024年02月01日
    浏览(76)
  • Skywalking全链路追踪【学习笔记】

    Skywalking全链路追踪的服务搭建,使用docker进行安装。 搭建【ES】 搭建【SkyWalking】 访问这里:http://localhost:9898/ 就有界面了 启动配置添加【Agent】 日志配置添加【日志】 完成 (~ ̄▽ ̄)~ 本地测试接口请求 然后登入http://localhost:9898/ 进行查看数据 参考 SkyWalking 教程:https

    2024年02月12日
    浏览(33)
  • 微服务链路追踪SkyWalking学习笔记

    目录 1、skywalking是什么 1.2 链路追踪框架对比 1.3 性能对比 1.4 Skywalking主要功能特性 2、 SkyWalking 环境搭建部署 2.1 下载 SkyWalking   2.2 搭建SkyWalking OAP 服务 2.3 SkyWalking中三个概念 3、 SkyWalking 接入微服务 3.1 linux环境—通过jar包方式接入 3.2 windos环境—在IDEA中使用Sk

    2024年02月14日
    浏览(34)
  • SkyWalking链路追踪-技术文档首页

    SkyWalking链路追踪-融合-spring-boot-cloud-单机环境 之《10 分钟快速搭建spring-boot-cloud整合SkyWalking链路追踪》_一单成的博客-CSDN博客 SkyWalking链路追踪-搭建-spring-boot-cloud-单机环境 之《10 分钟快速搭建 SkyWalking 服务》_一单成的博客-CSDN博客  SkyWalking链路追踪-Collector(收集器)_一单

    2024年02月15日
    浏览(63)
  • 分布式链路追踪之SkyWalking

      在微服务架构中,一次请求往往涉及到多个模块,多个中间件,多台机器的相互协作才能完成。这一系列调用请求中,有些是串行的,有些是并行的,那么如何确定这个请求背后调用了哪些应用,哪些模块,哪些节点及调用的先后顺序?如何定位每个模块的性能问题?本

    2023年04月20日
    浏览(49)
  • SkyWalking分布式链路追踪学习

    实际生产中,面对几十个、甚至成百上千个的微服务实例,如果一旦某个实例发生宕机,如果不能快速定位、提交预警,对实际生产造成的损失无疑是巨大的。所以,要对微服务进行监控、预警,对微服务的调用链路进行监控,迅速定位问题 SkyWalking下载 SkyWalking官网 elastic

    2024年02月07日
    浏览(40)
  • SkyWalking链路追踪中span全解

            在SkyWalking链路追踪中,Span(跨度)是Trace(追踪)的组成部分之一。Span代表一次调用或操作的单个组件,可以是一个方法调用、一个HTTP请求或者其他类型的操作。         每个Span都包含了一些关键的信息,如开始时间、结束时间、耗时、所属的Trace ID、Spa

    2024年02月16日
    浏览(37)
  • SkyWalking链路追踪-Collector(收集器)

    SkyWalking的Collector(收集器)是SkyWalking链路追踪的核心组件之一。它负责接收来自各个Agent的追踪数据,并将其存储到数据存储器(如数据库)中。具体来说,Collector提供了一个统一的接口,用于接收和处理从Agent发送过来的数据。 数据接收:Collector提供接口和服务来接收来自

    2024年02月15日
    浏览(40)
  • 第02讲:链路追踪利器,快速上手 SkyWalking

    SkyWalking 环境搭建 在本课时中,我们将安装并体验 SkyWalking 的基本使用,下面是使用到的相关软件包: apache-skywalking-apm-6.2.0.tar.gz 下载地址:https://archive.apache.org/dist/skywalking/6.2.0/ elasticsearch-6.6.1.tar.gz 下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.1.tar.gz ki

    2023年04月10日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包