Overview
ceilometer 中 alarm是基于监控sample,进行评估,然后得出告警是触发还是清除的信息。结构如下:
告警的基础是监控数据!在获取告警监控的基础上,分析这些数据,并最终得出并设置告警的状态。
实现代码结构
ceilometer/alarm
├── evaluator
│ ├── combination.py
│ ├── gnocchi.py
│ ├── __init__.py
│ ├── threshold.py
│ └── utils.py
├── __init__.py
├── notifier
│ ├── __init__.py
│ ├── log.py
│ ├── rest.py
│ ├── test.py
│ └── trust.py
├── partition
│ ├── coordination.py
│ └── __init__.py
├── rpc.py
├── service.py
└── storage
├── base.py
├── impl_db2.py
├── impl_hbase.py
├── impl_log.py
├── impl_mongodb.py
├── impl_sqlalchemy.py
├── __init__.py
├── models.py
└── pymongo_base.py
Alarm evaluator
目前,ceilometer提供了三种evaluator
- threshold:通过判断设定的指标的最大、最小或者平均值是否“超过“了设定的阈值来评估。
- combination:判断多个指标是否“超过“阈值来评估。
- gnocchi:openstack 的gnocchi项目提供的评估实现。
以threshold方式为例,分析告警评估过程
第一步:获取设置相应告警的对象的最大值、最小值、平均值,调用方法如下:
ceilometer/alarm/evaluator/threshold.py
def _statistics(self, alarm, query):
"""Retrieve statistics over the current window."""
LOG.debug(_('stats query %s') % query)
try:
return self._client.statistics.list(
meter_name=alarm.rule['meter_name'], q=query,
period=alarm.rule['period'])
except Exception:
LOG.exception(_('alarm stats retrieval failed'))
return []
事实上这是一个API调用,