支持复合阈值规则告警¶
https://blueprints.launchpad.net/ceilometer/+spec/composite-threshold-rule-alarm
该提案旨在支持创建可以指定复合阈值规则的告警,并尝试取代组合告警。
问题描述¶
组合告警的设计目的是处理针对多个条件的触发告警。组合告警需要依赖其他告警,这些依赖的告警可以是阈值告警或组合告警。如果情况复杂,这将形成依赖链。ZhiQiang Fan 在蓝图[1]中描述了组合告警评估的一些潜在问题
依赖链过长,导致组合告警的状态无法及时评估,在最坏的情况下,会导致组合告警永远无法更新。
更新告警时会引入死循环,导致组合告警的状态无法正确设置。
删除依赖告警时,依赖链会被破坏。
更多信息,请参阅:蓝图[1]和规范[2]
ZhiQiang Fan 通过 resolve-alarm-dependency-chain 提案[2] 为这些问题做了一些努力。该提案试图在 API 和告警评估器层检查和解决依赖链。为了解决上述问题,该提案的实现将非常复杂,并且考虑到告警评估器与分区协调器一起工作,情况会更糟,并且难以通过该提案解决。
提议的变更¶
该提案允许在创建阈值告警时指定多个阈值规则,并且阈值规则通过逻辑运算符组合:与、或。以下是新告警体的示例
{
......
"threshold_rules": {
"or": [{
"type": "threshold" (or "gnocchi_threshold")
"meter_name": "cpu_util",
"evaluation_periods": 1,
"period": 60,
"statistic": "avg",
"threshold": 0.8,
"query": [{
"field": "metadata.metering.stack_id",
"value": "36b20eb3-d749-4964-a7d2-a71147cd8147",
"op": "ge"
}],
"comparison_operator": "ge",
"exclude_outliers": false
},
{
"and": [{
"type": "threshold" (or "gnocchi_threshold")
"meter_name": "mem_util",
"evaluation_periods": 1,
"period": 60,
"statistic": "avg",
"threshold": 0.8,
"query": [{
"field": "metadata.metering.stack_id",
"value": "36b20eb3-d749-4964-a7d2-a71147cd8147",
"op": "ge"
}],
"comparison_operator": "ge",
"exclude_outliers": false
},
{
"type": "threshold" (or "gnocchi_threshold")
"meter_name": "disk.usage",
"evaluation_periods": 1,
"period": 60,
"statistic": "avg",
"threshold": 0.8,
"query": [{
"field": "metadata.metering.stack_id",
"value": "36b20eb3-d749-4964-a7d2-a71147cd8147",
"op": "ge"
}],
"comparison_operator": "ge",
"exclude_outliers": false
}]
}]
}
}
该提案的变更项
允许指定阈值规则列表,并使用两个逻辑运算符“与”、“或”组合阈值规则,请参见上面的示例。阈值规则的组合可以是多层级的,以支持复杂的场景。
告警评估器将解析与运算符组合的告警阈值规则,并按照适当的顺序使用从 Ceilometer 查询的统计列表评估阈值条件。在此过程中,应考虑短路逻辑,以避免不必要的统计查询和比较。
该提案不能应用于 EventAlarm,主要是因为事件告警评估不是周期性的,事件告警评估器监听消息总线,并且评估操作是由外部通知被动触发的。如果存在需要组合事件告警和阈值告警的告警用法,这将是不利的,但我更倾向于在用户端处理这种情况。这意味着如果用户希望在达到阈值并同时指定事件发生时触发告警,他们可以在上游应用程序中组合阈值告警和事件告警。
同时考虑到上述缺点,旧的组合告警功能也将作为复合规则告警的补充保留,但需要添加文档来描述潜在问题。
这些更改将轻松解决上述问题,并希望取代组合告警。此外,此更改将减少我们云中告警定义的数量,因为当前,如果我们需要组合告警,我们可能需要首先创建依赖告警。对于最终用户来说,显示触发多个条件的告警比组合告警(需要连续查询依赖告警)也更方便。
替代方案¶
采用提案[2]并努力使其与分区协调器一起工作。
数据模型影响¶
“threshold_rules” 将是一个字典,可以包含多个阈值规则,并且字典的键将是“and”或“or”。但这不会影响数据模型,因为规则以 json 格式存储在数据库中。
REST API 影响¶
无
安全影响¶
无
Pipeline 影响¶
无
其他最终用户影响¶
无
性能/可扩展性影响¶
无
其他部署影响¶
无
开发者影响¶
无
实现¶
负责人¶
- 主要负责人
liusheng
- 其他贡献者
你
- 持续维护者
liusheng
工作项¶
支持 Aodh API 以允许使用新的阈值规则定义创建告警,并希望 API 能够与以前的用法保持兼容。
实现存储层中的相关更改
更改阈值评估器以支持与告警关联的多个阈值规则和逻辑运算符。
未来生命周期¶
无
依赖项¶
无
测试¶
现有的声明性测试和使用 gabbi 的新测试应该被更改/添加,以测试告警的 CRUD 操作。
应该为新的阈值评估器过程添加单元测试。
文档影响¶
应该更新 API 文档以添加关于此功能描述。
应该更新用户指南以添加此用法描述。
参考资料¶
[1] https://blueprints.launchpad.net/ceilometer/+spec/resolve-combination-alarm-dependency-chain