发送事件通知¶
https://blueprints.launchpad.net/masakari/+spec/notifications-in-masakari
问题描述¶
目前,Masakari 不会发送关于主机、故障转移段以及用户发起的 RestFul API 操作请求的任何事件通知。
接收关于这些信息变更的创建、更新和删除事件通知将会很有用,并且有效载荷应该包含与 API 可访问的创建和更新相同的信息。
用例¶
操作员可以通过事件通知了解以下事项
API 进程的开始/结束
API 请求处理失败时的错误
有效载荷,其中包含 API 请求的内容
操作员可以使用事件通知进行分析、监控和计量目的。
提议的变更¶
将为以下事件发出版本化的通知
段
- 创建段
segment.create.start
segment.create.end
segment.create.error
- 更新段
segment.update.start
segment.update.end
segment.update.error
- 删除段
segment.delete.start
segment.delete.end
segment.delete.error
主机
- 创建主机
host.create.start
host.create.end
host.create.error
- 更新主机
host.update.start
host.update.end
host.update.error
- 删除主机
host.delete.start
host.delete.end
host.delete.error
通知
- 创建通知
notification.create.start
notification.create.end
notification.create.error
- 处理通知
notification.process.start
notification.process.end
notification.process.error
注意
仅当 masakari-engine 开始处理收到的通知(通过执行恢复工作流)时,才会发出处理通知事件。
事件通知通常包含以下信息
{
"priority": <string, selected from a predefined list[2] by the sender>,
"event_type": <string, defined by the sender>,
"timestamp": <string, the isotime of when the notification emitted>,
"publisher_id": <string, defined by the sender>,
"message_id": <uuid, generated by oslo>,
"payload": <json serialized dict, defined by the sender>
}
版本化的通知
与其他的 OpenStack 服务类似,Masakari 将使用 oslo.messaging-doc 提供的 Notifier 类向消息总线发出事件通知。
在版本化的通知中,有效载荷不是自由格式的字典,而是序列化的 oslo 版本化对象。换句话说,有效载荷应该是可以被 oslo-versionedobjects 库序列化的格式。
这是一个 segment.create.start 版本化通知的示例
{
"event_type": "segment.create.start",
"timestamp": "2018-11-22 09:25:12.393979",
"payload": {
"masakari_object.name": "SegmentApiPayload",
"masakari_object.data": {
"service_type": "compute",
"fault": null,
"recovery_method": "auto",
"description": null,
"name": "test"
},
"masakari_object.version": "1.0",
"masakari_object.namespace": "masakari"
},
"publisher_id": "masakari-api:fake-mini",
"message_id": "e44cb15b-dcba-409e-b0e1-9ee103b9a168"
}
备选方案¶
无
数据模型影响¶
为主机、故障转移段和通知添加 osloversioned.objects。数据库模式不会被修改。
REST API 影响¶
无
安全影响¶
无
通知影响¶
Masakari 不支持事件通知功能。此规范将添加此新功能。
其他最终用户影响¶
无
性能影响¶
由于在处理每个 RestFul API 请求期间发送事件通知的开销,性能会略有下降。操作员还可以使用配置选项完全禁用事件通知。
其他部署者影响¶
以下配置部分和选项将添加到 masakari.conf 中
[oslo_messaging_notifications]
driver=messaging
driver
Type: multi-valued
Default:''
The Drivers(s) to handle sending notifications. Possible values are messaging, messagingv2, routing, log, test, noop
部署者应该准备好消息传递系统(例如 RabbitMQ)以接收事件通知,如果他们想使用事件通知功能的话。
开发人员影响¶
此功能登陆代码后,开发者需要为新添加的 RestFul API 添加新的事件通知。
实现¶
负责人¶
主要负责人
本条 Honjo <honjo.rikimaru@po.ntt-tx.co.jp>
高原 健吾 <takahara-kn@njk.co.jp>
Shilpa Devharakar <shilpa.devharakar@nttdata.com>
工作项¶
添加事件通知机制的基础类
添加要用于发送事件通知的 osloversioned.objects
添加用于发送每个新添加的 osloversioned.object 的通知的方法
发送创建/更新/删除操作的事件通知
添加单元测试以进行代码覆盖
添加关于如何使用此功能的文档
依赖项¶
无
测试¶
不需要编写 tempest 测试,因为单元测试足以检查是否为每个创建、更新和删除操作发送了事件通知。
文档影响¶
添加文档以解释如何使用事件通知功能,以便操作员可以编写代码来接收这些事件以用于他们自己的目的。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Queens |
引入 |
Rocky |
已批准 |
Stein |
重新提出 |