[转帖]初识SkyWalking

初识,skywalking · 浏览次数 : 0

小编点评

**SkyWalking 是一个可观测平台,用于从服务和云原生基础设施收集、分析和聚合数据。** **主要功能:** * **服务(service):**表示对请求提供相同行为的一组工作负载。 * **服务实例(service instance):**上述的一组工作负载中的每一个工作负载称为一个实例。 * **端点(endpoint):**对于特定服务所接收的请求路径,如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名。 **架构:** * **探针:**集成到目标系统中的代理或SDK库,负责收集遥测数据。 * **平台后端:**支持数据聚合、分析和驱动数据流。 * **存储:**通过开放的插件化的接口存放 SkyWalking 数据。 * **UI:**一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。 **探针类型:** * 基于语言的原生代理:运行在目标服务的用户空间中,像用户代码的一部分一样。 * 服务网格探针:从服务网格的 Sidecar 和控制面板收集数据。 **跨线程支持:** 部分自动打点代理可能无法跨线程。对于一些语言,可能还提供协程或类似的概念。 **限制:** * 进程内传播的代理可能影响性能。 * 在某些场景下,自动打点代理可能会遇到问题。

正文

https://zhuanlan.zhihu.com/p/361579294

 

一、SkyWalking 是什么?

一个开源的可观测平台,用于从服务和云原生基础设施收集,分析, 聚合及可视化数据。

SkyWalking 提供了一种简便的方式来清晰地观测分布式系统,甚至横跨多个云平台。SkyWalking 更是一个现代化的应用程序性能监控(Application Performance Monitoring)系统,尤其专为云原生、基于容器的分布式系统设计。

二、为什么使用SkyWalking

SkyWalking为服务(service),服务实例(service instance),以及端点(endpoint)提供了可观测能力。

使用 SkyWalking 时,用户可以看到服务与端点之间的拓扑结构,每个服务/服务实例/端点的性能指标,还可以设置报警规则。

除此之外, 你还可以通过以下方式集成

  1. 其他分布式追踪使用 Skywalking 原生代理和Zipkin , Jaeger 和 OpenCensus 的 SDK;
  2. 其他度量指标系统,例如 Prometheus , Sleuth(Micrometer)。

概念讲解:
服务(service):表示对请求提供相同行为的一组工作负载。在使用打点代理或 SDK 的时候,你可以定义服务的名字。SkyWalking 还可以使用在 Istio 等平台中定义的名称。

服务实例(Service Instance):上述的一组工作负载中的每一个工作负载称为一个实例。就像 Kubernetes 中的 pods 一样,服务实例未必就是操作系统上的一个进程。 但当你在使用打点代理的时候,一个服务实例实际就是操作系统上的一个真实进程。

端点(Endpoint):对于特定服务所接收的请求路径,如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名。

三、SkyWalking架构

SkyWalking 逻辑上分为四部分:探针,平台后端,存储和用户界面。

  • 探针 基于不同的来源可能是不一样的,但作用都是收集数据,将数据格式化为 SkyWalking 适用的格式。
  • 平台后端 支持数据聚合,数据分析以及驱动数据流从探针到用户界面的流程。分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry , Zipkin 追踪格式化等。你甚至可以使用 Observability Analysis Language 对原生度量指标 和 用于扩展度量的计量系统 自定义聚合分析。
  • 存储 通过开放的插件化的接口存放 SkyWalking 数据。你可以选择一个既有的存储系统,如 ElasticSearch,也可以选择自己实现一个存储系统。
  • UI 一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。

四、探针

在 SkyWalking中,探针表示集成到目标系统中的代理或SDK库,它负责收集遥测数据,包括链路追踪和性能指标。根据目标系统的技术栈,探针可能有差异巨大的方式来达到以上功能。但从根本上来说都是一样的,即收集并格式化数据,并发送到后端。

从高层次上来讲,SkyWalking 探针可分为以下三组:

  • 基于语言的原生代理 这种类型的代理运行在目标服务的用户空间中,就像用户代码的一部分一样。如SkyWalking Java 代理,使用 -javaagent 命令行参数在运行期间对代码进行操作,操作 一词表示修改并注入用户代码。另一种代理是使用目标库提供的钩子函数或拦截机制。如你所见,这些探针是基于特定的语言和库。
  • 服务网格探针 服务网格探针从服务网格的 Sidecar 和控制面板收集数据。在以前,代理只用作整个集群的入口,但是有了服务网格和 Sidecar 之后,我们可以基于此进行观测了。
  • 第三方打点类库 SkyWalking 也能够接收其他流行的打点库产生的数据格式。SkyWalking 通过分析数据,将数据格式化成自身的链路和度量数据格式。该功能最初只能接收 Zipkin 的 span 数据。

你不必同时使用 基于语言的原生代理 和 服务网格探针 ,因为两者都收集指标数据,否则你的系统就要承受双倍负载,且分析数量会翻倍。

有如下几种推荐的方式来使用探针:

  1. 只使用 基于语言的原生代理
  2. 只使用 第三方打点库,如Zipkin 打点系统
  3. 只使用 服务网格探针
  4. 使用 服务网格探针,配合 语言原生代理 或 第三方打点库,来 追踪状态 。(高级用法)

服务自动打点代理:

服务自动打点代理是基于语言的原生代理的一部分,这种代理需要依靠某些语言特定的特性,通常是一种基于虚拟机的语言。

1、自动打点代理是什么意思?

对于最终用户来说他们不需要修改代码(至少在绝大多数情况下),只是被代理给修改了,这种做法通常叫做"在运行时操作代码"。底层原理就是自动打点代理利用了虚拟机提供的用于修改代码的接口来动态加入打点的代码,如通过 javaagent premain 来修改 Java 类。

此外, 我们说大部分自动打点代理是基于虚拟机的,但实际上你也可以在编译期构建这样的工具。

2、有什么限制?

  • 进程内传播在大多数情况下成为可能 许多高级编程语言(如 Java, .NET)都是用于构建业务系统。大部分业务逻辑代码对于每一个请求来说都运行在同一个线程内,这使得传播是基于线程 ID 的,以确保上下文是安全的。
  • 仅仅对某些框架和库奏效. 因为是代理来在运行时修改代码的,这也意味着代理插件开发者事先就要知道所要修改的代码是怎么样的。因此,在这种探针下通常会有一个已支持的列表清单。如 SkyWalking Java 代理支持列表。
  • 跨线程可能并非总是奏效 如上所述,每个请求的代码大都运行在一个线程之内, 对于业务代码来说尤其如此。但是在其他一些场景下,它们也会在不同线程下工作,比如指派任务到其他线程,任务池,以及批处理。对于一些语言,可能还提供了协程或类似的概念如 Goroutine使得开发者可以低开销地来执行异步操作,在这些场景下,自动打点可能会遇到一些问题。

所以说自动打点没有什么神秘的,总而言之就是,自动打点代理开发者写了一个激活程序,使得打点的代码自动运行,仅此而已


服务网格探针:

1、什么是服务网格?

服务网格通常用于描述组成此类应用程序的微服务网络以及它们之间的交互。随着服务网格的大小和复杂性的增长,它会变得更难理解和管理。它需要包括发现、负载平衡、故障恢复、度量和监视以及更复杂的操作需求A/B测试、金丝雀发布、限流、访问控制和端到端身份验证。

2、探针从哪里采集数据

Istio 是一个非常典型的服务网格的设计和实现。它定义了 控制平面 和 数据平面,被广泛使用。下面是 Istio 的架构 :

服务网格探针可以选择从 控制平面 和 数据平面 采集数据。在 Istio 中,指的是从 Mixer(Control Panel) 或者 Envoy sidecar(Data Panel) 中采集遥测数据。探针从客户端和服务器端收集每个请求的两个遥测实体,它们其实是相同的数据。

3、服务网格如何使后端工作

从探针中,您可以看到在这种探针中一定没有相关的跟踪,那么为什么 SkyWalking 平台仍然可以工作?

服务网格探针从每个请求收集遥测数据,因此它知道源、目标、端点、延迟和状态。通过这些,后端可以通过将这些调用合并为行来描述整个拓扑图,以及每个节点通过传入请求的度量。后端解析跟踪数据,请求相同的度量数据。因此,正确的表述是:

服务网格度量就是跟踪解析器生成的度量。他们是相同的。

与[转帖]初识SkyWalking相似的内容:

[转帖]初识SkyWalking

https://zhuanlan.zhihu.com/p/361579294 一、SkyWalking 是什么? 一个开源的可观测平台,用于从服务和云原生基础设施收集,分析, 聚合及可视化数据。 SkyWalking 提供了一种简便的方式来清晰地观测分布式系统,甚至横跨多个云平台。SkyWalkin

[转帖]初识SkyWalking

https://zhuanlan.zhihu.com/p/361579294 一、SkyWalking 是什么? 一个开源的可观测平台,用于从服务和云原生基础设施收集,分析, 聚合及可视化数据。 SkyWalking 提供了一种简便的方式来清晰地观测分布式系统,甚至横跨多个云平台。SkyWalkin

[转帖]RabbitMQ学习笔记01:初识与安装

https://www.cnblogs.com/alongdidi/p/rabbitmq_overview.html 原作者写的真好. 前言 本人是一名运维工程师,在此公司接触到 RabbitMQ ,平时针对此软件的工作内容就是集群的安装以及配置监控等,对其的理解也仅仅是知道其是一种消息队列的服务,

[转帖]JVM系列之:GC调优基础以及初识jstat命令

本文为《深入学习 JVM 系列》第二十二篇文章 影响垃圾收集性能有三个主要的属性,垃圾收集调优又有三个基本原则,以及垃圾收集调优时需要采集的信息。如果想要对垃圾收集进行调优,则需要根据实际场景对不同属性做出取舍,理解调优的原则以及收集什么信息。 性能属性 吞吐量 吞吐量是评价垃圾收集器能力的重要指标

[转帖]什么是HBase?终于有人讲明白了

http://blog.itpub.net/70024420/viewspace-2929074/ 初识HBase HBase 是一个面向列式存储的分布式数据库,其设计思想来源于 Google 的 BigTable 论文。HBase 底层存储基于 HDFS 实现,集群的管理基于 ZooKeeper

[转帖]深入理解mysql-第十章 mysql查询优化-Explain 详解(上)

目录 一、初识Explain 二、执行计划-table属性 三、执行计划-id属性 四、执行计划-select_type属性 一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采

[转帖]1. awk基础,awk介绍,awk基本语法,直接使用action,打印列,初识列和行,\$0、\$NF、NF,基础示例,begin模式,end模式

文章目录 前言awk介绍awk基本语法直接使用action打印列初识列和行\$0、\$NF、NF基础示例初识模式(begin end) 总结友情链接 前言 本小节是awk基础入门课程,掌握awk从这一小节开始。 awk介绍 awk其实是一门编程语言,它支持条件判断、数组、循环等功能。所以可以把awk

[转帖]Redis高可用集群

目录 1、 前言 2、初识TwemProxy 2.1 什么是TwemProxy 2.2 安装TwemProxy 2.3 配置TwemProxy 2.4 测试TwemProxy 3、初识Keepalived 3.1 什么Keepalived 3.2 安装keepalive 3.3 配置keepaliv

[转帖]LSM树详解

https://zhuanlan.zhihu.com/p/181498475 LSM树(Log-Structured-Merge-Tree)的名字往往会给初识者一个错误的印象,事实上,LSM树并不像B+树、红黑树一样是一颗严格的树状数据结构,它其实是一种存储结构,目前HBase,LevelDB,Ro

[转帖]初步探索GraalVM——云原生时代JVM黑科技

https://baijiahao.baidu.com/s?id=1749705890892955339&wfr=spider&for=pc 1 云原生时代Java语言的困境 经过多年的演进,Java语言的功能和性能都在不断的发展和提高,诸如即时编译器、垃圾回收器等系统都能体现Java语言的优秀,但