vitrage/doc/source/contributor/datasource-snmp-parsing-support.rst
xupeipei 04adf8667d Modify SNMP parsing config file
also add guide of how to support processing snmp events 
in alarm datasources

Change-Id: I74bb1f292938b42a70de5b22377d646e30802120
Implements: blueprint snmp-support
Signed-off-by: xupeipei <xu.peipei1@zte.com.cn>
2018-01-22 11:03:20 +00:00

95 lines
3.5 KiB
ReStructuredText

===========================================
Adding Snmp Parsing Support in A Datasource
===========================================
Overview
--------
Vitrage provides a service to parse snmp traps and send the parsed
event to RabbitMQ queue. To add the snmp trap to graph, there should be
a datasource that gets the event and processes it.
HOW to support Snmp Parsing Service in a datasource
---------------------------------------------------
In order to extend snmp support in datasources and configure it, users
need to do the following:
1. Add the snmp configuration file ``snmp_parsing_conf.yaml``. It configures
the oid that maps system information and event type when snmp parsing service
sends message.
**Example**
.. code:: python
- system_oid: 1.3.6.1.4.1.3902.4101.1.3.1.12
system: iaas_platform
event_type: vitrage.snmp.event
2. Under snmp_parsing package ``__init__.py``, set ``oid_mapping`` property
to the path of snmp configuration file.
3. In the driver class of your alarm datasource package, add an event type in the method
``get_event_types``, which can be ``vitrage.snmp.event`` according to the config file
above.
4. To transform parsed snmp trap to standard alarm event, need to add mapping of oid and
alarm property. Take mapping of oids and doctor event properties as an example.
**Example**
.. code:: python
OID_INFO = [('1.3.6.1.6.3.1.1.4.1.0', 'status'),
('1.3.6.1.4.1.3902.4101.1.3.1.4', 'hostname'),
('1.3.6.1.4.1.3902.4101.1.3.1.5', 'source'),
('1.3.6.1.4.1.3902.4101.1.3.1.6', 'cause'),
('1.3.6.1.4.1.3902.4101.1.3.1.7', 'severity'),
('1.3.6.1.4.1.3902.4101.1.3.1.8', 'monitor_id'),
('1.3.6.1.4.1.3902.4101.1.3.1.9', 'monitor_event_id'),
('1.3.6.1.4.1.3902.4101.1.3.1.12', 'system')]
The value of key '1.3.6.1.6.3.1.1.4.1.0' defines snmp trap's report or recover status,
and it's also an oid. There should be a mapping of this relationship.
**Example**
.. code:: python
ALARM_STATUS = {'1.3.6.1.4.1.3902.4101.1.4.1.1': 'up',
'1.3.6.1.4.1.3902.4101.1.4.1.2': 'down'}
5. The method ``enrich_event`` of the driver class is responsible for enriching given event.
The following code should be added at the beginning of ``enrich_event``. Note that the event
type ``vitrage.snmp.event`` here is consistent with the example of config file above.
**Example**
.. code:: python
if 'vitrage.snmp.event' == event_type:
self._transform_snmp_event(event)
The function ``_transform_snmp_event`` transform a parsed snmp trap to event of standard
format. An example is as follows. ``self.OID_INFO`` and ``self.ALARM_STATUS`` are defined
in the example above, and their content depends on SNMP trap organization.
**Example**
.. code:: python
def _transform_snmp_event(self, event):
src_details = event['details']
event_details = {}
for (oid, field_name) in self.OID_INFO:
if oid not in src_details.keys():
continue
event_details[field_name] = self._get_oid_mapping_value(field_name, src_details[oid])
event['details'] = event_details
def _get_oid_mapping_value(self, field_name, value):
if field_name == 'status':
value = extract_field_value(self.ALARM_STATUS, value)
return value