发送事件通知

https://blueprints.launchpad.net/masakari/+spec/notifications-in-masakari

问题描述

目前,Masakari 不会发送关于主机、故障转移段以及用户发起的 RestFul API 操作请求的任何事件通知。

接收关于这些信息变更的创建、更新和删除事件通知将会很有用,并且有效载荷应该包含与 API 可访问的创建和更新相同的信息。

用例

操作员可以通过事件通知了解以下事项

  • API 进程的开始/结束

  • API 请求处理失败时的错误

  • 有效载荷,其中包含 API 请求的内容

操作员可以使用事件通知进行分析、监控和计量目的。

提议的变更

将为以下事件发出版本化的通知

  1. 创建段

    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

  2. 主机

    创建主机

    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

  3. 通知

    创建通知

    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 添加新的事件通知。

实现

负责人

主要负责人

工作项

  • 添加事件通知机制的基础类

  • 添加要用于发送事件通知的 osloversioned.objects

  • 添加用于发送每个新添加的 osloversioned.object 的通知的方法

  • 发送创建/更新/删除操作的事件通知

  • 添加单元测试以进行代码覆盖

  • 添加关于如何使用此功能的文档

依赖项

测试

不需要编写 tempest 测试,因为单元测试足以检查是否为每个创建、更新和删除操作发送了事件通知。

文档影响

添加文档以解释如何使用事件通知功能,以便操作员可以编写代码来接收这些事件以用于他们自己的目的。

参考资料

历史

修订版

发布名称

描述

Queens

引入

Rocky

已批准

Stein

重新提出