写点什么

SkyWalking 原理浅析

作者:技术小生
  • 2022 年 7 月 10 日
  • 本文字数:857 字

    阅读完需:约 3 分钟

SkyWalking原理浅析

APM 监控

在微服务日益盛行的今天,越来越复杂的 IT 架构环境使故障定位、数据统计、性能优化等问题变得困难重重。于是,APM(应用性能管理)应运而生,很好地解决了 IT 运维管理的难题。

在微服务监控的三驾马车分别是 Log、Metrics 和 Trace。

  • Log 记录系统行为事件,如 ELK

  • Metrics 系统在某段时间内某一方面的度量,如 Promethus

  • Trace 分布式链路跟踪,如 SkyWalking


SkyWalking 整体介绍

SkyWalking 定位为一个观测性分析平台,核心功能:服务、服务实例、端点指标分析;服务拓扑图分析;慢查询检测;告警功能

特点:多语言探针;微内核+插件的架构,存储、集群管理、使用插件集合都可以自由选择;支持告警;优秀的可视化效果。

整体架构分为三个部分:

  1. Agent 运行在各个服务实例中,负责采集服务实例的 Trace 及 Metrics 信息数据,然后通过 HTTP/gRPC 方式上报给 SkyWalking 服务端

  2. OAP SkyWalking 服务端

  3. 分析引擎(Analysis Core) 接收上报的数据,进行流式分析,最终将分析结果写入到存储中

  4. 查询引擎(Query Core) 响应 UI 界面的查询请求,将数据查询出来,返回给界面展示

  5. UI 界面:负责展示查询结果,可视化数据展示


核心功能原理浅析

如何采集数据

  • 通过植入 Agent 采集服务数据

将 Agent 以 premain 的方式植入服务应用中,Agent 使用 Byte Buddy 对应用服务进行动态能力增强

  • OpenTracing 标准

OpenTracing 标准认定一条 Trace 被认为由一个或多个 Span 组成的有向无环图。而 Span 代表的就是系统中具有开始时间和执行时长的逻辑单元,Span 之间通过嵌套或者顺序排列建立逻辑因果关系。


如何跨线程传递

  1. 在跨进程调用之前,当前进程会通过 inject()方法将当前 Context 的全部内容注入到指定的 ContextCarrier,然后才能将当前 Context 的信息发送出去。

  2. 在跨进程调用的接收方,会通过 extract()方法将收到的 Context 从 ContextCarrier 中提取出来


请求量大会不会影响性能

可以设置采样频率,只采样部分数据,SkyWalking 默认设置了 3 秒采样 3 次,其余请求不采样。为了防止链路不完整的情况发生,如果上游有携带 Context 过来(说明上游采样了),则下游强制采集数据。

发布于: 刚刚阅读数: 5
用户头像

技术小生

关注

业务应用架构专家 2019.10.08 加入

主要负责公司内部系统的应用架构设计与落地。擅长Java语言开发,熟悉Python、Shell等。精通K8S等云原生相关技术。

评论

发布
暂无评论
SkyWalking原理浅析_APM_技术小生_InfoQ写作社区