SkyWalking 原理浅析
APM 监控
在微服务日益盛行的今天,越来越复杂的 IT 架构环境使故障定位、数据统计、性能优化等问题变得困难重重。于是,APM(应用性能管理)应运而生,很好地解决了 IT 运维管理的难题。
在微服务监控的三驾马车分别是 Log、Metrics 和 Trace。
Log 记录系统行为事件,如 ELK
Metrics 系统在某段时间内某一方面的度量,如 Promethus
Trace 分布式链路跟踪,如 SkyWalking
SkyWalking 整体介绍
SkyWalking 定位为一个观测性分析平台,核心功能:服务、服务实例、端点指标分析;服务拓扑图分析;慢查询检测;告警功能
特点:多语言探针;微内核+插件的架构,存储、集群管理、使用插件集合都可以自由选择;支持告警;优秀的可视化效果。
整体架构分为三个部分:
Agent 运行在各个服务实例中,负责采集服务实例的 Trace 及 Metrics 信息数据,然后通过 HTTP/gRPC 方式上报给 SkyWalking 服务端
OAP SkyWalking 服务端
分析引擎(Analysis Core) 接收上报的数据,进行流式分析,最终将分析结果写入到存储中
查询引擎(Query Core) 响应 UI 界面的查询请求,将数据查询出来,返回给界面展示
UI 界面:负责展示查询结果,可视化数据展示
核心功能原理浅析
如何采集数据
通过植入 Agent 采集服务数据
将 Agent 以 premain 的方式植入服务应用中,Agent 使用 Byte Buddy 对应用服务进行动态能力增强
OpenTracing 标准
OpenTracing 标准认定一条 Trace 被认为由一个或多个 Span 组成的有向无环图。而 Span 代表的就是系统中具有开始时间和执行时长的逻辑单元,Span 之间通过嵌套或者顺序排列建立逻辑因果关系。
如何跨线程传递
在跨进程调用之前,当前进程会通过 inject()方法将当前 Context 的全部内容注入到指定的 ContextCarrier,然后才能将当前 Context 的信息发送出去。
在跨进程调用的接收方,会通过 extract()方法将收到的 Context 从 ContextCarrier 中提取出来
请求量大会不会影响性能
可以设置采样频率,只采样部分数据,SkyWalking 默认设置了 3 秒采样 3 次,其余请求不采样。为了防止链路不完整的情况发生,如果上游有携带 Context 过来(说明上游采样了),则下游强制采集数据。
版权声明: 本文为 InfoQ 作者【技术小生】的原创文章。
原文链接:【http://xie.infoq.cn/article/d3ad8388f12bbbf958b927318】。文章转载请联系作者。
评论