自禁用 Pollster

https://blueprints.launchpad.net/ceilometer/+spec/self-disabled-pollster

避免在所需环境未就绪时加载 Pollster。移除在轮询期间导致持续异常的资源。

问题描述

目前 Pollster 的使用方式如下:

  1. 通过 setup.cfg 定义

  2. 在初始化时加载每个 Pollster

  3. 以周期性方式调用 Pollster 的 get_samples 来收集指标

这个固定的流程不足以处理各种情况,例如以下情况:

  1. 一个 Pollster 依赖于特定的环境,例如计算节点 Pollster 需要正确的 hypervisor inspector,ipmi Pollster 需要安装 ipmitool。无条件加载 Pollster 会产生额外的异常或无效样本,并导致轻微的性能下降。部署时的检查无法解决所有问题,因为环境会动态变化。完美的解决方案是在加载时进行检查,如果缺少所需的环境,则不加载该 Pollster。

  2. 一个 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 个版本中进行测试和错误修复,以避免回归

依赖项

测试

需要单元测试

文档影响

参考资料