定义和处理实体间的等价性

https://blueprints.launchpad.net/vitrage/+spec/entity-equivalence

定义实体间的等价性,以便将两个或多个实体映射到同一个对象,并在场景评估器中正确处理它。它受到 Idan Hefetz 关于 ZTE 告警抑制用例 的提案启发,但设计方式具有通用性,以便将来扩展到资源等价性。

问题描述

引入实体等价性将增强 Vitrage 的可扩展性,使其适用于更多用例,例如

  • 在告警报告之前提前 抑制 告警,并处理实际的告警

  • 聚合 来自多个监控器的等价告警

  • 聚合来自多个数据源的资源信息。

提议的变更

添加一个新文件(或一组文件)来定义实体之间的等价性

metadata:
 name: entity equivalence example
equivalences:
 - equivalence:
    - entity:
       category: ALARM
       type: nagios
       name: host_problem
    - entity:
       category: ALARM
       type: zabbix
       name: host_problem
    - entity:
       category: ALARM
       type: vitrage
       name: host_problem
  - equivalence:
    ...

这些定义将全局生效,即对每个模板都有效

评估器将为每个等价告警自动复制每个场景。例如,对于条件

condition: nagios_host_problem_on_host and host_contains_vm

内部将创建两个条件

condition: nagios_host_problem_on_host and host_contains_vm
condition: zabbix_host_problem_on_host and host_contains_vm
condition: vitrage_host_problem_on_host and host_contains_vm

其思想是用户编写单个条件,所有等价条件将自动创建和评估。

等价性应显式定义。将一个实体包含在两个或多个等价性定义中将导致隐式链式关系,因此被认为无效。例如,如果定义了 a eq bb eq c,则逻辑上会产生隐式的 a eq c。这将在创建模板时引入不必要的复杂性,应在验证器中限制。

备选方案

单独文件与嵌入式定义

与其创建一个单独的文件,我们可以通过添加一个新的部分 equivalences 将等价性定义嵌入到模板中。彼此等价的实体被分组在其 template_id 的数组中

metadata:
 name: entity equivalence example
definitions:
 entities:
  - entity:
     category: ALARM
     type: nagios
     name: host_problem
     template_id: nagios_host_problem
  - entity:
     category: ALARM
     type: zabbix
     name: host_problem
     template_id: zabbix_host_problem
  - entity:
     category: ALARM
     type: vitrage
     name: host_problem
     template_id: vitrage_host_problem
  ...
 relationships:
  ...
 equivalences:
  - [nagios_host_problem, zabbix_host_problem, vitrage_host_problem]
scenarios:
  ...

这样,将减少实体定义的重复。

然而,考虑到一旦在两个告警之间添加了 equivalent 边,那么从逻辑上讲,这意味着它们在所有其他模板中都是等价的。即使它们没有以这种方式在其他模板中指定。那么模板在没有嵌入等价性信息的情况下会变得不清晰。

可以通过在其他蓝图(blueprint)中实现 import 功能来解决实体定义的重复问题。

添加等价边与不添加

equivalent 边可以在每两个等价告警之间创建。由于所有相关场景都已复制,这在评估器中不会带来额外的价值。

equivalent 边对于未来的演进(例如告警聚合、UI 优化、告警抑制)可能很有用。它可以在这些蓝图中实现。

数据模型影响

REST API 影响

版本影响

其他最终用户影响

部署者影响

开发者影响

Horizon 影响

当前 vitrage-dashboard 中有三个视图

拓扑视图

无影响

RCA 视图

更多告警和更多 causes

待办事项

(yujunz) 包含示例图

实体图

  • 为等价告警(nagios, zabbix, vitrage)分隔顶点

  • 更多边(equivalenton

总结

对 RCA 视图和实体图的影响仅与同时使用 equivalencevitrage-dashboard 的情况相关。我们将在未来的蓝图中处理它。

实现

负责人

主要负责人

yujunz

其他贡献者

工作项

  • 验证和解析模板中的等价性定义

  • 在场景存储库中复制场景

  • 子图匹配或评估器中没有变化

以下项目不在范围内

  • 聚合等价告警

  • add-equivalent 操作

  • 在 UI 中支持告警等价性

  • 实现用于告警抑制增强的因果树模型

  • 资源等价性

依赖项

测试

实现将由额外的单元测试覆盖

文档影响

  • 关于如何定义等价性以及何时使用它的文档

  • 声明资源等价性的限制

  • 列出在使用 equivalencevitrage-dashboard 时已知的问题

参考资料