赞
踩
告警的核心是由’ alarm-setting.yml’文件中配置的一组规则驱动的。告警规则(Rules)的定义分为两部分
详细配置可参考github:
https://github.com/apache/skywalking/blob/master/docs/en/setup/backend/backend-alarm.md#entity-name
2:告警处理类概述
告警模块中处理逻辑涉及到的类及其职责介绍
org.apache.skywalking.oap.server.core.alarm.provider.AlarmModuleProvider,实现ModuleProvider 抽象类,Alarm模块的提供者Provider。在准备阶段ModuleDefine中调用,运行prepare()进行准备操作
将Rules转换成RunningRule,构建Map<String, List> runningContext,metricsName对应RunningRule集合
和Map<AlarmRule, RunningRule> alarmRuleRunningRuleMap 规则和RunningRule对应MAP
告警服务实现类,处理告警逻辑
属性:
方法:
1.接收Metrics,根据scope封装MetaInAlarm信息,获取MetricsName所有的RunningRule 集合
2.调用AlarmCore. #findRunningRule(String),由入参MetaInAlarm指标名称获取匹配的 RunningRule实例List
3.若第一步返回的list不为空,对list<RunningRule>元素分别调用RunningRule.in()方法
告警规则执行类,分别对不同的告警规则的范围内的实例对象进行是否触发告警规则的判断并记录
方法:
一个指标窗口,基于警报规则#period,这个窗口随时间滑动
属性:
方法:
告警服务数据入口,判断有无初始化alarm模块,找到NotifyHandler,传送数据
告警通知Worker,接受Metrics,
#(接告警数据来源,路由到告警核心。在MetricsAggregateWorker进行L1聚合之后执行告警工作)
告警信息持久化或推送的接口,只有一个方法doAlarm(List<AlarmMessage> alarmMessage)用于处理告警信息,AlarmStandardPersistence 类用于持久化告警信息;WebhookCallback类用于通过Webhook推送告警信息
# 在此强调一点,如果想要在skywalking中实现自己的通知钩子,需要实现AlarmCallback接口,实现doAlarm方法,参数就是AlarmMessage集合
告警核心处理,根据告警配置,包括某些时间窗口的指标值。通过使用它的内部定时器
触发器和告警规则来决定是否发送告警到数据库和webhook(s)
1:初始化最后执行时间(lastExecuteTime属性)为当前系统时间
2:调用Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate方法新建每10秒定期执行的单线程、延迟10秒的线程池任务,任务流程如下
2.1:计算任务最后执行时间(lastExecuteTime属性)与当前任务执行时间(checkTime取当前系统时间)之间相差的分钟数
2.2:若分钟数不大于0,则本次任务不做任何事
2.3:若分钟数大于0,则循环操作runningContext里的值List<RunningRule>的每个元素
首先调用RunningRule类的moveTo方法移动其时间窗口到当前任务执行时间(checkTime),然后判断当前任务执行时间(checkTime)的秒数是否超过15,若超过15秒,则调用RunningRule类的check()方法生成告警信息放入List<AlarmMessage>,再判断生成的告警信息是否为空,不为空则对入参List<AlarmCallback>循环调用AlarmCallback.doAlarm方法推送告警信息并将任务最后执行时间(lastExecuteTime属性)更新为当前任务执行时间(checkTime,秒数设为00)
告警模块中规则动态读取涉及到的类及其职责介绍
告警模块在准备阶段会初始化告警规则,AlarmModuleProvider加载alarm-setting.yml
当我们使用动态配置alarm-setting.yml的时候,处理流程,涉及到的类及其职责介绍如下
配置监听默认实现者,实现 DynamicConfigurationService
前面介绍了告警处理和告警规则动态配置,告警处理的NotifyHandler.notify(Metrics metrics): 接收Metrics进行告警处理。这部分主要说下告警的metrics是怎么传递过去的
流程启动类
分析器提供者,加载oal/core.oal 解析成 OALDefine
OAL加载处理类
OAL Runtime是类生成引擎,它从OAL脚本定义加载生成的类,这个运行时动态加载
@Stream注解处理类,根据Processor类型处理,以上生成的metricsClasses注解@Sream中processor=MetricsStreamProcessor
指标Stream聚合处理器
属性:
方法:
提供了内存中的指标合并功能。指标聚合类(L1聚合)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。