为 Watcher 数据模型添加范围

https://blueprints.launchpad.net/watcher/+spec/scope-for-watcher-datamodel

问题描述

对于像 CERN 这样的大型云基础设施,服务器数量超过 10k,从 Nova 获取数据来构建 Watcher 计算数据模型可能需要很长时间。如果审计只需要对所有节点的一个子集进行,那么从审计需要的节点获取数据会更好。

用例

作为 Watcher 用户,我希望 Watcher 在创建审计之前不要构建计算数据模型。作为 Watcher 用户,我希望 Watcher 根据审计的范围构建计算数据模型。

提议的变更

目前,Watcher 在启动决策引擎时构建计算数据模型。并且有一个定期任务来重建数据模型。为了避免在创建审计之前构建数据模型,我们需要在构建数据模型之前检查一个标志。例如

def execute(self):
    """Build the compute cluster data model"""
    if self._audit_scope_handler is None:
        LOG.debug("No audit, Don't Build compute data model")
        return

    builder = ModelBuilder(self.osc)
    return builder.execute(self._data_model_scope)

审计范围是在创建审计时的一个可选参数。如果用户没有设置范围,默认范围为空,这意味着此审计适用于所有节点。审计范围的一个例子

{"compute":
    [{"host_aggregates": [
                          {"id": 1},
                          {"id": 2},
                          {"id": 3}]},
     {"availability_zones": [
                          {"name": "AZ1"},
                          {"name": "AZ2"}]},
}

在根据审计范围构建数据模型时,需要考虑一些情况

没有数据模型,审计范围为空

  • 这是第一次构建数据模型。因为审计范围为空,数据模型应该包含所有节点。

没有数据模型,审计范围不为空

  • 这是第一次根据审计范围构建数据模型。

现有数据模型,新的审计范围为空

  • 如果数据模型已经包含所有节点,则不会重建。

  • 如果数据模型不包含所有节点,则会重建。

现有数据模型,新的审计范围不为空

  • 如果范围中指定的节点已经包含在数据模型中,则不会重建。

  • 如果范围中指定的节点未包含在数据模型中,则会重建。

备选方案

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

这将减少对系统性能的影响,尤其是在大型云基础设施中。

其他部署者影响

开发人员影响

实现

负责人

主要负责人

<licanwei>

工作项

  • 在构建数据模型之前,添加一个检查来创建审计。

  • 在 ModelBuilder 类中添加模型范围来记录审计范围。

  • 根据审计范围更新数据模型。

依赖项

测试

添加单元测试。

文档影响

更新 Watcher 开发人员文档。

参考资料

历史

修订版

发布名称

描述

Stein

引入