Define and handle equivalence among entities
Co-Authored-By: Idan Hefetz <idan.hefetz@nokia.com> Co-Authored-By: Ifat Afek <ifat.afek@nokia.com> Change-Id: Ida7d8293fce580fea0501b86c0fd5502e22f86a0 Implement: blueprint entity-equivalence
This commit is contained in:
parent
5ea32d38cb
commit
27fa2274ce
247
specs/pike/entity-equivalence.rst
Normal file
247
specs/pike/entity-equivalence.rst
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
============================================
|
||||||
|
Define and handle equivalence among entities
|
||||||
|
============================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/vitrage/+spec/entity-equivalence
|
||||||
|
|
||||||
|
Define equivalence among entities to allow mapping two or more entities to same
|
||||||
|
object and handle it properly in scenario evaluator. It is inspired by Idan
|
||||||
|
Hefetz's proposal about `ZTE use case of alarm deduction`_, but designed in a
|
||||||
|
generic way to allow extending to RESOURCE equivalence in future.
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
Introducing entity equivalence will enhance the extensibility of Vitrage,
|
||||||
|
making it suitable for more use cases, such as
|
||||||
|
|
||||||
|
- early `deduction`_ of alarm before it is reported and deal with the real
|
||||||
|
alarm followed
|
||||||
|
- `aggregation`_ of equivalent alarms from multiple monitors
|
||||||
|
- aggregation of resource information from multiple data sources.
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
Add a new file (or a set of files) that define equivalence between entities
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
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:
|
||||||
|
...
|
||||||
|
|
||||||
|
These definitions will take effect globally, i.e. for every other template
|
||||||
|
|
||||||
|
The evaluator will duplicate every scenario for every equivalent alarm
|
||||||
|
automatically. For example, in case of the condition:: yaml
|
||||||
|
|
||||||
|
condition: nagios_host_problem_on_host and host_contains_vm``
|
||||||
|
|
||||||
|
Two conditions will be created internally:: yaml
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
The idea is that the user will write a single condition, and all equivalent
|
||||||
|
conditions will be created and evaluated automatically.
|
||||||
|
|
||||||
|
Equivalences should be defined explicitly. Including one entity in two or more
|
||||||
|
equivalence definition will result in implicit chaining, thus is considered
|
||||||
|
invalid. For example, if ``a eq b`` and ``b eq c`` are defined separately, it
|
||||||
|
will logically result in an implicit ``a eq c``. This will introduce unnecessary
|
||||||
|
complexity in creating templates and should be restricted in validator.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
Separate file vs embedded definition
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Instead of creating a separate file, we may embed the equivalence definitions in
|
||||||
|
templates by adding a new section ``equivalences``. Entities that are equivalent
|
||||||
|
to each other are grouped in arrays of their ``template_id``
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
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:
|
||||||
|
...
|
||||||
|
|
||||||
|
In this way, there will be fewer duplication of entity definitions.
|
||||||
|
|
||||||
|
However, given the fact that once an ``equivalent`` edge is added between two
|
||||||
|
alarms, then it *logically* means that they are equivalent in *all* other
|
||||||
|
templates as well. Even if they are not specified this way in the other
|
||||||
|
templates. Then template will be less clear without the equivalence information
|
||||||
|
embedded in it.
|
||||||
|
|
||||||
|
The duplication of entity definition might be resolved by implementing an
|
||||||
|
``import`` feature in other blueprint.
|
||||||
|
|
||||||
|
Adding equivalent edge vs not
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
``equivalent`` edges could be created between every two equivalent alarms.
|
||||||
|
Since all related scenarios have been duplicated, This does not bring extra
|
||||||
|
value in the evaluator.
|
||||||
|
|
||||||
|
The ``equivalent`` edge could be useful for future evolution such as alarm
|
||||||
|
aggregation, UI optimization, alarm deduction. It may be implemented in those
|
||||||
|
blueprints.
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Versioning impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Deployer impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Horizon impact
|
||||||
|
--------------
|
||||||
|
|
||||||
|
There are currently three views in ``vitrage-dashboard``
|
||||||
|
|
||||||
|
Topology view
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
No impact
|
||||||
|
|
||||||
|
RCA view
|
||||||
|
^^^^^^^^
|
||||||
|
|
||||||
|
More alarms and more ``causes`` edges
|
||||||
|
|
||||||
|
.. TODO:: (yujunz) include example graph
|
||||||
|
|
||||||
|
Entity graph
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- separate vertices for equivalent alarms (nagios, zabbix, vitrage)
|
||||||
|
- more edges (``equivalent`` and ``on``)
|
||||||
|
|
||||||
|
Summary
|
||||||
|
^^^^^^^
|
||||||
|
|
||||||
|
The impacts on RCA view and Entity graph will only be relevant to cases where
|
||||||
|
both ``equivalence`` and ``vitrage-dashboard`` are used. We will handle it in
|
||||||
|
future blueprints.
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
yujunz
|
||||||
|
|
||||||
|
Other contributors:
|
||||||
|
None
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
- validate and parse equivalence definition in templates
|
||||||
|
- duplicate scenarios in the scenario repository
|
||||||
|
- no changes in sub-graph matching or the evaluator
|
||||||
|
|
||||||
|
The following items are not in scope
|
||||||
|
|
||||||
|
- aggregation of equivalent alarms
|
||||||
|
- ``add-equivalent`` action
|
||||||
|
- support alarm equivalence in UI
|
||||||
|
- implement causal tree model for alarm deduction enhancement
|
||||||
|
- resource equivalence
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
The implementation will be covered by additional unit test
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
- documentation on how to define equivalence and when to use it
|
||||||
|
- declare limitation on resource equivalence
|
||||||
|
- list known issues when use ``equivalence`` with ``vitrage-dashboard``
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. _ZTE use case of alarm deduction: https://goo.gl/FfDLi8
|
||||||
|
.. _deduction: https://review.openstack.org/#/c/423000/
|
||||||
|
.. _aggregation: https://blueprints.launchpad.net/vitrage/+spec/alarm-aggregation
|
Loading…
Reference in New Issue
Block a user