自禁用 Pollster¶
https://blueprints.launchpad.net/ceilometer/+spec/self-disabled-pollster
避免在所需环境未就绪时加载 Pollster。移除在轮询期间导致持续异常的资源。
问题描述¶
目前 Pollster 的使用方式如下:
通过 setup.cfg 定义
在初始化时加载每个 Pollster
以周期性方式调用 Pollster 的 get_samples 来收集指标
这个固定的流程不足以处理各种情况,例如以下情况:
一个 Pollster 依赖于特定的环境,例如计算节点 Pollster 需要正确的 hypervisor inspector,ipmi Pollster 需要安装 ipmitool。无条件加载 Pollster 会产生额外的异常或无效样本,并导致轻微的性能下降。部署时的检查无法解决所有问题,因为环境会动态变化。完美的解决方案是在加载时进行检查,如果缺少所需的环境,则不加载该 Pollster。
一个 Pollster 被加载并运行良好,然后一些轮询资源变得不可用,因此 Pollster 无法生成样本,并可能抛出异常,导致性能下降。我们需要检测这些变化,然后从轮询中移除该资源。还需要在日志中添加警告,以便操作员可以跟踪和处理它。
提议的变更¶
提供 Pollster 特定响应的基础设施,然后采取不同的操作。
对于情况 1,需要在 Pollster 构造函数中提供一个函数,如果缺少所需的硬件,则引发特定的异常。在加载扩展时,添加 on_load_failure_callback,它会检查并抑制该异常以避免加载此扩展。可能需要一个配置列表来指示可以跳过的 Pollster。
对于情况 2,我们需要 Pollster 在运行时抛出 2 种不同的异常:
瞬时故障:像现有故障一样处理
永久故障:不再从该 Pollster 轮询该资源
为了实现这一点,我们有 PollingTask 来捕获永久故障,然后阻止对该资源的轮询。
替代方案¶
无
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
Pipeline 影响¶
无
其他最终用户影响¶
无
性能/可扩展性影响¶
这个 BP 通过避免加载不必要的 Pollster 并移除不可用的资源来消除持续异常,从而提高性能。
其他部署影响¶
无
开发者影响¶
无
实现¶
负责人¶
- 主要负责人
edwin-zhai
- 其他贡献者
lianhao-lu
- 持续维护者
edwin-zhai
工作项¶
对于加载时的 Pollster
在 Pollster 构造函数中添加环境检查函数
添加新的 on_load_failure_callback 以避免加载失败的扩展
对于运行时的 Pollster
修改所需的 Pollster 以抛出永久故障异常
修改 PollingTask 以跳过失败的资源
未来生命周期¶
一旦此功能启用,需要在接下来的 2 个版本中进行测试和错误修复,以避免回归
依赖项¶
无
测试¶
需要单元测试
文档影响¶
无
参考资料¶
无