AODH 代码分析
版本:aodh-4.0.3
前序
aodh是有ceilometer分离出来的组件,主要功能是提供资源告警功能,支持log,webhook等方式告警。
下面的分析建议先运行aodh alarm create -h 了解创建时有哪几种类型,哪几种字段。这里会有另一篇文章翻译分析。
组成
aodh有四大块组成
evaluator:告警条件触发计算模块
notifier : 负责告警通知
listener:监听模块
api:aodh启动模块
evaluator
代码目录:/aodh/evaluator/
可以看到有几个文件,分别对应一或多种告警类型
composite.py – compsoite 组合类型
event.py 时间类型
gnocchi.py 由gnocchi提供数据的告警类型
threshold.py 由ceilometer提供数据的告警类型
入口
_ init _.py文件
class Evaluator(object):
"""Base class for alarm rule evaluator plugins."""
def __init__(self, conf):
self.conf = conf
self.notifier = queue.AlarmNotifier(self.conf)
self.storage_conn = None
self._ks_client = None
self._alarm_change_notifier = None
加载通知notifier,后续条件触发时会调用到
def __init__(self, worker_id, conf):
super(AlarmEvaluationService, self).__init__(worker_id)
self.conf = conf
ef = lambda: futures.ThreadPoolExecutor(max_workers=10)
self.periodic = periodics.PeriodicWorker.create(
[], executor_factory=ef)
self.evaluators = extension.ExtensionManager(
namespace=self.EVALUATOR_EXTENSIONS_NAMESPACE,
invoke_on_load=True,
invoke_args=(self.conf,)
)
self.storage_conn = storage.get_connection_from_config(self.conf)
self.partition_coordinator = coordination.PartitionCoordinator(
self.conf)
self.partition_coordinator.start()
self.partition_coordinator.join_group(self.PARTITIONING_GROUP_NAME)
# allow time for coordination if necessary
delay_start = self.partition_coordinator.is_active()
if self.evaluators:
@periodics.periodic(spacing=self.conf.evaluation_interval,
run_immediately=not delay_start)
def evaluate_alarms():
self._evaluate_assigned_alarms()
self.periodic.add(evaluate_alarms)
if self.partition_coordinator.is_active():
heartbeat_interval = min(self.conf.coordination.heartbeat,
self.conf.evaluation_interval / 4)
@periodics.periodic(spacing=heartbeat_interval,
run_immediately=True)
def heartbeat