支持看守者中的多数据源¶
包含您的 Launchpad 蓝图的 URL
https://blueprints.launchpad.net/watcher/+spec/watcher-multi-datasource
问题描述¶
目前,看守者支持 Telemetry、Monasca 和 gnocchi 来收集集群指标。为每种数据源类型都存在一个辅助类,用于实现查询并提供结果。我们需要创建一个数据源抽象类,该类将定义所有指标能力方法的接口。各个数据源辅助类必须实现这些方法。
用例¶
作为管理员,我希望针对特定的数据源后端运行策略。
提议的变更¶
为所有数据源定义一个通用的抽象层。定义获取所有当前策略使用的指标的方法。它还包含一个指标映射,将策略指标需求映射到数据源指标名称。
class DatasourceBase(object): METRIC_MAP=dict(datasource=dict(metric_name_watcher= metric_name_datasource,),) @abc.abstractmethod def get_host_cpu_usage(self, resource_id, period, aggregate, granularity=None): raise NotImplementedError @abc.abstractmethod def get_instance_cpu_usage(self, resource_id, period, aggregate, granularity=None): raise NotImplementedError
将所有现有的数据源辅助类更新为 DatasourceBase 类的子类。在 ceilometer、monasca 和 gnocchi 类中实现 DatasourceBase 类的抽象方法。
支持从多个数据源收集指标数据。用户可以在 watcher.conf 中定义数据源优先级,我们可以通过将其类型更改为列表来使用现有的配置。
[watcher_strategies.basic] datasource = ceilometer, gnocchi, monasca
这可以通过两种方式完成
基于策略计算 datasource_backend 值。检查策略使用的计量单位是否在第一个优先的数据源中可用,如果可用,则为该审核请求的所有后续请求选择该后端。
基于指标计算 datasource_backend,即每次策略请求获取一些指标数据时,根据 conf 文件中设置的优先级以及所选数据源中指标的可用性来计算 datasource_backend 的值。
第二种方案的开销是每次请求到达时都需要选择数据源,但优点是如果一个指标在一个数据源中不可用,它可以检查其他数据源。根据当前看守者策略的要求,第一种方案就足够了。
定义一个数据源管理器类来计算数据源后端。
class DatasourceManager(object): def get_backend(self, metrics): ''' returns: object of DatasourceBase child class '''
更新现有策略以使用新的数据源类,使策略基类中的 datasource_backend 属性抽象化。
class BasicConsolidation(base.ServerConsolidationBaseStrategy): @property def datasource_backend(self): self.datasource_backend = manager.DataSourceManager( config=self.config, osc=self.osc ).get_backend(self.METRIC_NAMES) return self._datasource_backend def get_node_cpu_usage(self, node): resource_id = "%s_%s" % (node.uuid, node.hostname) return self.datasource_backend.get_host_cpu_usage( resource_id = resource_id, period=self.period, aggregate = 'avg', granularity=None )
备选方案¶
如果我们保留现有的实现,每个策略都必须使用数据源驱动程序提供的特定接口。这使得策略的实现与特定的数据源高度耦合。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
使用多个数据源可能会降低整个 OpenStack 集群的性能。
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
adi-sky17
工作项¶
实现所有数据源驱动程序的基础类。
定义获取现有策略使用的所有计量单位的抽象方法。
在 ceilometer、monasca 和 gnocchi 类中实现抽象方法。
更新现有策略以使用新的格式。
依赖项¶
无
测试¶
需要更新单元测试
文档影响¶
参考资料¶
无
历史¶
无