aodh: 2、aodh告警组件核心功能源码分析

本文目录如下:1 引言2 复合告警解析规则3 总结预计读完时间5分钟左右。1 引言aodh是从ceilometer拆分出来的告警组件。之前已经分析过,这个组件主要的服务在于aodh-evaluator服务: 每隔一定时间进行告警是否触发的验证,如果触发,就发送告警信息给aodh-notifier服务aodh-notifier服务: 进行告警通知的触发。例如: webhook...
摘要由CSDN通过智能技术生成

本文目录如下:
1 引言
2 复合告警解析规则
3 总结

1 引言


aodh是从ceilometer拆分出来的告警组件。之前已经分析过,这个组件主要的服务在于
aodh-evaluator服务: 每隔一定时间进行告警是否触发的验证,如果触发,就发送告警信息给aodh-notifier服务
aodh-notifier服务: 进行告警通知的触发。例如: webhook,日志等告警通知器。
之前分析过,aodh-evaluator服务与aodh-notifier服务之间的通信是借助于消息队列(即rabbitmq)来完成。

2 复合告警规则解析


aodh这个组件在openstack各个组件中算是一个比较简单的组件,看最近社区似乎在这个组件上几乎没有太多重要的更新了。
这个组件本身无非是进行告警的校验,告警的通知这两个主要功能。但是这个组件除了其服务的分工框架上可以学到一些以后
自研告警项目对于框架的整体划分外。
我认为这个组件最核心的一个功能就是复合告警规则解析,这个功能完全是可以应用到以后
类似的很多基于规则解析的项目中。
下面是针对这部分内容的源码分析。

2.1 总入口


如果是复合告警规则类型的告警,则进入
源码:
aodh/evaluator/composite.py的CompositeEvaluator类的evaluate方法
该方法具体如下:

    def evaluate(self, alarm):
        if not self.within_time_constraint(alarm):
            LOG.debug('Attempted to evaluate alarm %s, but it is not '
                      'within its time constraint.', alarm.alarm_id)
            return

        LOG.debug("Evaluating composite rule alarm %s ...", alarm.alarm_id)
        self.rule_targets = []
        self.rule_num = 0
        rule_target_alarm, rule_target_ok = self._parse_composite_rule(
            alarm.rule)

        sufficient = self._evaluate_sufficient(alarm, rule_target_alarm,
                                               rule_target_ok)
        if not sufficient:
            for rule in self.rule_targets:
                rule.evaluate()
            sufficient = self._evaluate_sufficient(alarm, rule_target_alarm,
                                                   rule_target_ok)

        if not sufficient:
            # The following unknown situations is like these:
            # 1. 'unknown' and 'alarm'
            # 2. 'unknown' or 'ok'
            reason, reason_data = self._reason(alarm, evaluator.UNKNOWN,
                                               rule_target_alarm)
            if alarm.state != evaluator.UNKNOWN:
                self._refresh(alarm, evaluator.UNKNOWN, reason, reason_data)
            else:
                LOG.debug(reason)

分析:
1) 上述方法中最重要的内容如下:
        rule_target_alarm, rule_target_ok = self._parse_composite_rule(
            alarm.rule)
这个方法就是对复合告警规则解析

2) evaluate: 总入口方法,
步骤1: 先解析复合规则
步骤2: 对解析的复合规则调用bool方法
步骤3: 得到校验结果后,进行后续处理

2.2 复合告警规则解析方法分析


该方法是aodh/evaluator/composite.py的CompositeEvaluator类的
_parse_composite_rule方法,
方法定义如下:
    def _parse_composite_rule(self, alarm_rule):
        """Parse the composite rule.

        The composite rule is assembled by sub threshold rules with 'and',
        'or', the form can be nested. e.g. the form of composite rule can be
        like this:
        {
            "and": [threshold_rule0, threshold_rule1,
            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值