SkyWalking 是一个开源 APM 系统,包括针对 Cloud Native 体系结构中的分布式系统的监视、跟踪、诊断功能。核心功能如下:
- 服务、服务实例、端点指标分析
- 根本原因分析,在运行时分析代码
- 服务拓扑图分析
- 服务,服务实例和端点依赖性分析
- 检测到慢速服务和端点
- 性能优化
- 分布式跟踪和上下文传播
- 数据库访问指标。检测慢速数据库访问语句(包括 SQL 语句)
- 报警
SkyWalking 目前是 Apache 顶级项目,作为这么优秀的开源项目,它的架构设计理念肯定会有很多值得我们借鉴。
Skywalking 告警模块设计
Skywalking 的告警模块设计的非常完美,具体代码结构如下:
AlarmModuleProvider 主要功能:
- prepare() 方法,主要用于读取 alarm-settings.yml 里面的告警配置信息;注册告警规则监听器 AlarmRulesWatcher;初始化 NotifyHandler 通知回调处理器;绑定度量 service 服务 MetricsNotify 和通知回调处理器 NotifyHandler。
- start() 方法,主要用于开启模块化的动态配置中心,当然可以是 Skywalking 支持的任何配置中心,具体可以参考我的另外一篇文章(分布式链路追踪 SkyWalking:配置管理设计);将 AlarmRulesWatcher 和动态配置服务绑定,完成告警规则的实时动态刷新;告警数据持久化类的初始化,AlarmStandardPersistence,方便 Skywalking UI 的查询。
AlarmRulesWatcher 主要功能:
- 通过构造函数传入从配置文件中读取的默认告警规则参数,并完成一次告警规则变更的通知。
- 通知变更事件 EventType 主要分为 ADD、MODIFY、DELETE。
- AlarmRulesWatcher 继承 ConfigChangeWatcher,它是 Skywalking 的分布式配置中心的核心 API。
- notify 方法会被 ConfigWatcherRegister 触发,这个是分布式配置中心实现动态刷新的核心类,这样整个告警模块就实现了动态刷新。
NotifyHandler 主要功能:
- NotifyHandler 继承 MetricsNotify。
- MetricsNotify 指标通知服务应由报警模块提供者提供,并由存储核心驱动,接收指标值。报警模块提供商可以选择是否报警或如何报警。同时,存储核心会为生成的报警提供标准的持久性服务,如果报警引擎希望在 UI 中显示报警,需要继承这个类并实现方法 notify,完成保存。
- NotifyHandler 是整个度量指标系统和告警指标系统桥接的核心类,上层调用方是 AlarmEntrance.forward(Metrics metrics)
- 从度量数据 Metrics 中获取到元数据,并解析和构造 MetaInAlarm 数据。
- 从告警核心 AlarmCore 中获取到内存中正在运行的告警规则,当然是通过度量规则的名称来匹配告警规则,所以这就是为什么要在告警规则中要求度量名称要和度量规则名称保持一致的原因。
- 遍历规则和告警元数据,生成告警信息,完成通知。
- NotifyHandler 目前支持三种类型的回调,AlarmStandardPersistence、WebhookCallback 和 GRPCCallback。
- 整个回调的初始化在 AlarmCore 中完成,会调用 `start(List<AlarmCallback> allCallbacks)`,完成所有的回调的初始化。会在 NotifyHandler 的 init 方法中完成。
- 如何注册服务 registerServiceImplementation,因为 Skywalking 整个平台都是采用服务化设计,每个服务都会归属于一个服务类型,然后通过插件化完成同一个服务类型的不同实现的灵活切换,这个是核心模块的核心原理。
综上所述告警模块整体架构设计如下:
原创不易,欢迎支持原创,能够给作者一定的打赏,也是作者持续输出优秀文章的动力。欢迎关注作者的gitchat账户和原文链接:
分布式链路追踪 Skywalking:告警和度量架构设计
https://gitbook.cn/new/gitchat/activity/5f0f1c95f257a6295caf208d
往期文章精选:
分布式链路追踪 Skywalking:插件化和模块化架构设计
分布式链路追踪Skywalking Skywalking 存储客户端设计
源码分析-分布式链路追踪:Skywalking存储插件能力-elasticsearch
游侠-一名对技术、管理、架构和业务孜孜不倦的高级码农