Ceilometer alarm 初学习

ceilometer H版本开始支持alarm的功能。


Alarm的定义:

Essentiallyan alarm is just a set of rules defining a monitor, plus a currentstate, with edge-triggered actions associated with target states.These alarms follow a tri-state model of okalarm,and insufficient data.

可见alarm是一组规则的集合,定义了对哪个meter进行监控,alarm状态以及某状态下的触发动作。alarm3个状态:ok,alarm, insufficient data.

一个alarm的结构大致如下:

{
"id": "123456789",
"name": "SwiftObjectAlarm",
"description": "A alarm is raise when 2 aggregates of 240 seconds are greater than 2.0 swift objects",
"timestamp": "2013-04-08T05:17:13.698331", # timestamp of last update
"counter_name": "storage.objects",
"user_id": "a3b70c53b94648438b442b485606e7cf", # owner of the alarm
"project_id": "bfe523aebf2f4e5e9a997a9452927811", # project owner of the alarm
"aggregate_period": 240.0,
"evaluation_period": 2,
"statistic": "average",
"metadatas": {"project_id": "c96c887c216949acbdfbd8b494863567"}, # the project_id used to match a sample or not "comparison_operator": "gt",
"threshold": 2.0,
"state" : 1,
"state_timestamp": "2013-04-08T05:17:13.698331",
"alarm_actions": [ "http://site:8000/%(state_text)s" ],
"ok_actions": [ "http://site:8000/%(state_text)s" ],
"insufficient_data_actions": [ "http://site:8000/%(state_text)s" ]
}

Alarmmeter的关系:



Alarm的处理流程图:



代码分析

rpc.py:


定义了两种类型的Notifier:

RPCAlarmNotifier

RPCAlarmPartitionCoordination


service.py:


首先定义了AlarmService基础Service类,提供一些公共的方法:

_load_evaluators:使用stevedoreextension的方式加载evaluator的实现(在Pythonceilometer.alarm.evaluator下面).

_evaluate_assigned_alarms:先获取alarm集合,对每一个alarm,调用_evaluate_alarm方法。

_evaluate_alarm:根据alarmtype,alarm分配给对应的evaluator进行处理。

_assigned_alarms:获取alarm集合的抽象方法,具体实现交给子类来完成。

AlarmService的两个子类:

SingletonAlarmService作为一个OpenstackService,周期性(默认为60s)的调用_evaluate_assigned_alarms方法来对定义的alarms进行计算(evaluate).


PartitionedAlarmService:是一个OpenstackRPCService,依赖PartitionCoordinator类,除了完成和SingletonAlarmService一样的的功能---周期调用_evaluate_assigned_alarms还周期运行PartitionCoordinatorreport_presence1/4周期)和check_mastership方法(1/2周期)。同时作为RPCService,它还会处理消息队列中topic为“alarm_partition_coordination的消息。(对应于RPCAlarmPartitionCoordination


service.py中还定义了

AlarmNotifierService也是一个OpenstackRPC Service依赖ceilometer.alarm.notifier包中的notifierplugin实现。接收消息队列中topic为“alarm_notifier的消息(由evaluator发出的)并调用notify_alarm方法,notify_alarm方法调用_handle_action方法,最终通过notifier.notify来执行alarmaction.

UML 类图



疑问

  PartitionCoordinator是做什么用的, 何谓partition coordination protocol?



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值