添加管理服务状态变更通知¶
https://blueprints.launchpad.net/nova/+spec/service-status-notification
目前外部系统无法获取基于 Nova 服务状态的通知信息。Nova 服务状态可以通过 os-services/disable API 进行管理方式的变更。
提供此类通知有助于衡量维护窗口的长度,或间接通知用户维护操作可能对基础设施的运行产生影响。
问题描述¶
用例¶
部署者希望衡量某些 Nova 服务因故障排除或维护操作而被管理方式禁用所花费的时间,因为此信息可能是部署者和最终用户之间协议的一部分。
部署者希望衡量某些 Nova 服务因外部检测到的错误而被强制关闭所花费的时间,因为此信息可能是部署者和最终用户之间协议的一部分。
提议的变更¶
解决上述问题的简单方法是为以下操作添加 oslo.messaging 通知
/v2/{tenant_id}/os-services/disable
/v2/{tenant_id}/os-services/enable
/v2/{tenant_id}/os-services/disable-log-reason
/v2/{tenant_id}/os-service/force-down
然后 Ceilometer 可以接收这些通知,并通过 Ceilometer 查询计算维护窗口的长度。
或者,其他第三方工具(如 StackTach)可以通过 AMQP 接收新的通知。
备选方案¶
唯一的替代方案是定期轮询 /v2/{tenant_id}/os-services/ API,但这会导致信息流较慢,并给 Nova API 和 DB 服务带来负载。
数据模型影响¶
预计不会更改数据库模式。
以下新对象将被添加到 Nova
@base.NovaObjectRegistry.register
class ServiceStatusNotification(notification.NotificationBase):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'payload': fields.ObjectField('ServiceStatusPayload')
}
@base.NovaObjectRegistry.register
class ServiceStatusPayload(base.NovaObject):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'service': fields.ObjectField('Service')
}
NotificationBase 的定义可以在 Versioned notification spec [3] 中找到。
REST API 影响¶
无
安全影响¶
无
通知影响¶
将引入一个新的 service.status.update 通知,优先级为 INFO,通知的有效载荷将是现有 Service versioned 对象的序列化形式。这将是第一个使用 versioned 对象作为有效载荷的通知,但有一个倡议是将 versioned 对象作为每个 Nova 通知中的有效载荷 [3]。此新通知将不支持发出旧格式。
在实现此规范期间,我们将提供基于 [3] 发出 versioned 通知所需的最低基础设施,但所有高级功能(如示例和文档生成)将在实现期间完成 [3]。
例如,在以下 API 调用之后
PUT /v2/{tenant_id}/os-services/disable-log-reason
{"host": "Devstack",
"binary": "nova-compute",
"disabled_reason": "my reason"}
通知将包含以下有效载荷
{
"nova_object.version":"1.0",
"nova_object.name":"ServiceStatusPayload",
"nova_object.namespace":"nova",
"nova_object.data":{
"service":{
"nova_object.version":"1.19",
"nova_object.name":"Service",
"nova_object.namespace":"nova",
"nova_object.data":{
"id": 1,
"host": "Devstack"
"binary": "nova-compute",
"topic": "compute",
"report_count": 32011,
"disabled": true,
"disabled_reason": "my reason,
"availability_zone": "nova",
"last_seen_up": "2015-10-15 07:29:13",
"forced_down": false,
"version": 2,
}
"nova_object.changes":[
"disabled",
"disabled_reason",
]
}
}
}
请注意,compute_node 字段将不会序列化到通知有效载荷中,因为这会引入大量此处不需要的额外数据。
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
balazs-gibizer
工作项¶
如果 Service 对象的 disabled disabled_reson 或 forced_down 字段更新,则发送新的通知
依赖项¶
这项工作是 Versioned notification API [3] 工作的一部分。但它不直接依赖于它。在峰会上,我们同意将此新通知作为 versioned notification api 工作的第一步,以激励操作员开始使用新的 versioned 通知。
测试¶
除了单元测试,还将添加新的功能测试用例来覆盖新的通知
文档影响¶
无
参考资料¶
- [1] 此想法已经在 ML 上讨论过了
http://lists.openstack.org/pipermail/openstack-dev/2015-April/060645.html
- [2] 此工作与 bp mark-host-down 相关,但不依赖于它
[3] Versioned notification spec https://review.openstack.org/#/c/224755/
历史¶
发布名称 |
描述 |
|---|---|
Mitaka |
引入 |