Aodh Notifier

launchpad 蓝图: https://blueprints.launchpad.net/vitrage/+spec/aodh-notifier

评估器对 Vitrage 图进行根本原因分析,并可能确定应创建、删除或以其他方式更新警报。Vitrage Notifier 服务会通知其他组件这些更改。其中,Vitrage Notifier 负责处理 Aodh 警报。

此蓝图描述了 Vitrage Notifier 实现,用于在 Vitrage 警报时通知 Aodh。

+------------------+           +------------------+          +------------------+
|   Aodh           <--+        |                  |          |                  |
+------------------+  | Update |      Vitrage     |  Raise   |      Vitrage     |
                      +--------|                  <----------|                  |
+------------------+  | Alarm  |      Notifier    |  Alarm   |      Evaluator   |
| Other components <--+        |                  |          |                  |
+------------------+           +------------------+          +------------------+

问题描述

Vitrage 应能够根据评估器引擎的请求创建、删除或以其他方式更新警报。通知器负责确保执行这些更新。具体来说,我们将从 Aodh 警报开始。

主要挑战

  • Aodh 中无法定义“自定义警报”

  • Vitrage 警报基于资源。需要将资源信息传递给 Aodh

  • 可以同时触发相同类型的多个警报,每个警报对应不同的资源。例如,如果某个主机上存在警报,Vitrage 将对该主机上的每个实例引发推导出的警报。

  • 如何请求有关 Vitrage 警报更新的通知?

提议的变更

Vitrage Notifier 将与评估器分离,因为两者对规模和其他性能考虑因素有不同的需求。Vitrage Notifier 将提供一个由 Vitrage 评估器使用的 API,包含创建/删除/更新警报。

在 Aodh 中,Vitrage 警报将被定义为事件警报,这似乎是最合适的选项。警报查询中将定义资源 ID。

Vitrage 推导出的警报将如下所示

属性

alarm_actions

[]

alarm_id

4a3cb988-a620-4bf3-87f7-077c751c408f

description

实例不可达

enabled

True

event_type

vitrage.alarm.instance_unreachable

insufficient_data_actions

[]

name

vitrage_instance_unreachable_1

ok_actions

[]

project_id

5542b27142154f30b32dea6238aa81aa

query

[{field’: ‘resource_id’, ‘type’: ‘’, ‘value’: ‘b0bf3635-d9e8-4624-9793-7aac82948c0a’, ‘op’: ‘eq’}]

repeat_actions

False

severity

moderate

state

alarm

type

event

user_id

8ab65ef808b245e3ba234b7b3554cb94

在此示例中,Vitrage 触发一个推导出的警报,表明由于公共交换机故障(由 Nagios 检测到)实例不可达。将存在具有相同 event_type 和不同实例 ID 的查询的多个警报。

触发 Vitrage 警报在 Aodh 中有两种选择,没有一个是完美的。

方案 1

Vitrage 将在 Aodh 中创建一个事件警报。然后,它将向消息总线发送通知。该通知将被转换为 Ceilometer 事件,这将触发 Aodh 警报。

确切的通知和事件格式仍待确定 (TBD)。

此解决方案的主要问题是 Aodh 警报将动态创建并立即触发,因此其他项目在警报触发之前无法注册 webhook。可以在 list-alarms 中看到 Vitrage 警报,但无法在首次触发时收到通知。

方案 2

Vitrage 将在 Aodh 中创建一个事件警报,状态为“alarm”。事件本身将永远不会发送,因此警报状态将保持“alarm”。

此解决方案的问题是 Aodh 不会发送有关警报触发的通知。但由于在方案 1 中也无法注册警报,因此这两个选项之间没有真正的区别。

数据模型影响

REST API 影响

版本影响

其他最终用户影响

部署者影响

对于方案 1 - 需要定义通知 -> 事件配置

对于方案 2 - 无需

开发者影响

Horizon 影响

实现

负责人

主要负责人

idan-hefetz

工作项

依赖项

测试

此蓝图需要单元测试和 Tempest 测试。

文档影响

对于方案 1 - 需要记录通知 -> 事件配置

对于方案 2 - 无需

参考资料

Vitrage wiki 页面: https://wiki.openstack.org/wiki/Vitrage

Vitrage 用例: https://github.com/openstack/vitrage/blob/master/doc/source/vitrage-use-cases.rst