Voltha Alarm Management using OpenNMS and Elasticsearch
- Added necessary configuration to run a self-contained instance of
OpenNMS
- Elasticsearch/Logstash is responsible for the interception of voltha
alarms and to forward to OpenNMS
Amendment:
- Cleaned up untouched opennms config files
- Added Dockerfile and scripts to override the default entrypoint script
Change-Id: Id611a330f7274d016281e734ade79d22bfc0356b
diff --git a/compose/opennms/etc/translator-configuration.xml b/compose/opennms/etc/translator-configuration.xml
new file mode 100644
index 0000000..b536a99
--- /dev/null
+++ b/compose/opennms/etc/translator-configuration.xml
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<event-translator-configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://xmlns.opennms.org/xsd/translator-configuration http://www.opennms.org/xsd/config/translator-configuration.xsd ">
+
+ <!-- Improved LinkDown/LinkUp events. Uses translator to add DB information to link status traps events -->
+ <translation>
+ <event-translation-spec uei="uei.opennms.org/generic/traps/SNMP_Link_Down">
+ <mappings>
+ <mapping>
+ <assignment name="uei" type="field" >
+ <value type="constant" result="uei.opennms.org/translator/traps/SNMP_Link_Down" />
+ </assignment>
+ <assignment name="ifDescr" type="parameter">
+ <value type="sql" result="SELECT snmp.snmpIfDescr FROM snmpInterface snmp WHERE snmp.nodeid = ?::integer AND snmp.snmpifindex = ?::integer" >
+ <value type="field" name="nodeid" matches=".*" result="${0}" />
+ <value type="parameter" name="~^\.1\.3\.6\.1\.2\.1\.2\.2\.1\.1\.([0-9]*)$" matches=".*" result="${0}" />
+ </value>
+ </assignment>
+ <assignment name="ifName" type="parameter">
+ <value type="sql" result="SELECT snmp.snmpIfName FROM snmpInterface snmp WHERE snmp.nodeid = ?::integer AND snmp.snmpifindex = ?::integer" >
+ <value type="field" name="nodeid" matches=".*" result="${0}" />
+ <value type="parameter" name="~^\.1\.3\.6\.1\.2\.1\.2\.2\.1\.1\.([0-9]*)$" matches=".*" result="${0}" />
+ </value>
+ </assignment>
+ <assignment name="ifAlias" type="parameter">
+ <value type="sql" result="SELECT snmp.snmpIfAlias FROM snmpInterface snmp WHERE snmp.nodeid = ?::integer AND snmp.snmpifindex = ?::integer" >
+ <value type="field" name="nodeid" matches=".*" result="${0}" />
+ <value type="parameter" name="~^\.1\.3\.6\.1\.2\.1\.2\.2\.1\.1\.([0-9]*)$" matches=".*" result="${0}" />
+ </value>
+ </assignment>
+ </mapping>
+ <mapping>
+ <assignment name="uei" type="field" >
+ <value type="constant" result="uei.opennms.org/internal/topology/linkDown" />
+ </assignment>
+ </mapping>
+ </mappings>
+ </event-translation-spec>
+ <event-translation-spec uei="uei.opennms.org/generic/traps/SNMP_Link_Up">
+ <mappings>
+ <mapping>
+ <assignment name="uei" type="field" >
+ <value type="constant" result="uei.opennms.org/translator/traps/SNMP_Link_Up" />
+ </assignment>
+ <assignment name="ifDescr" type="parameter">
+ <value type="sql" result="SELECT snmp.snmpIfDescr FROM snmpInterface snmp WHERE snmp.nodeid = ?::integer AND snmp.snmpifindex = ?::integer" >
+ <value type="field" name="nodeid" matches=".*" result="${0}" />
+ <value type="parameter" name="~^\.1\.3\.6\.1\.2\.1\.2\.2\.1\.1\.([0-9]*)$" matches=".*" result="${0}" />
+ </value>
+ </assignment>
+ <assignment name="ifName" type="parameter">
+ <value type="sql" result="SELECT snmp.snmpIfName FROM snmpInterface snmp WHERE snmp.nodeid = ?::integer AND snmp.snmpifindex = ?::integer" >
+ <value type="field" name="nodeid" matches=".*" result="${0}" />
+ <value type="parameter" name="~^\.1\.3\.6\.1\.2\.1\.2\.2\.1\.1\.([0-9]*)$" matches=".*" result="${0}" />
+ </value>
+ </assignment>
+ <assignment name="ifAlias" type="parameter">
+ <value type="sql" result="SELECT snmp.snmpIfAlias FROM snmpInterface snmp WHERE snmp.nodeid = ?::integer AND snmp.snmpifindex = ?::integer" >
+ <value type="field" name="nodeid" matches=".*" result="${0}" />
+ <value type="parameter" name="~^\.1\.3\.6\.1\.2\.1\.2\.2\.1\.1\.([0-9]*)$" matches=".*" result="${0}" />
+ </value>
+ </assignment>
+ </mapping>
+ <mapping>
+ <assignment name="uei" type="field" >
+ <value type="constant" result="uei.opennms.org/internal/topology/linkUp" />
+ </assignment>
+ </mapping>
+ </mappings>
+ </event-translation-spec>
+
+ <!-- This translation is predifined for integration with Hyperic-HQ server and the OpenNMS integrations found in
+ the $OPENNMS_HOME/contrib/hyperic-integration directory -->
+ <event-translation-spec uei="uei.opennms.org/external/hyperic/alert">
+ <mappings>
+ <mapping>
+ <assignment name="uei" type="field" >
+ <value type="constant" result="uei.opennms.org/internal/translator/hypericAlert" />
+ </assignment>
+ <assignment name="nodeid" type="field" >
+ <value type="sql" result="SELECT n.nodeid FROM node n WHERE n.foreignid = ? AND n.foreignsource = ?" >
+ <value type="parameter" name="platform.id" matches=".*" result="${0}" />
+ <value type="parameter" name="alert.source" matches=".*" result="${0}" />
+ </value>
+ </assignment>
+ </mapping>
+ </mappings>
+ </event-translation-spec>
+
+ <!-- Translations for configuration management -->
+ <event-translation-spec uei="uei.opennms.org/vendor/Cisco/traps/ciscoConfigManEvent" >
+ <mappings>
+ <mapping>
+ <assignment name="uei" type="field" >
+ <value type="constant" result="uei.opennms.org/internal/translator/entityConfigChanged" />
+ </assignment>
+ <assignment name="configSource" type="parameter" >
+ <!-- ccmHistoryEventCommandSource -->
+ <value type="parameter" name="~^\.1\.3\.6\.1\.4\.1\.9\.9\.43\.1\.1\.6\.1\.3\..*" matches=".*" result="${0}" />
+ </assignment>
+ <assignment name="configUser" type="parameter" >
+ <value type="constant" result="Unknown" />
+ </assignment>
+ </mapping>
+ </mappings>
+ </event-translation-spec>
+ <event-translation-spec uei="uei.opennms.org/vendor/Juniper/traps/jnxCmCfgChange" >
+ <mappings>
+ <mapping>
+ <assignment name="uei" type="field" >
+ <value type="constant" result="uei.opennms.org/internal/translator/entityConfigChanged" />
+ </assignment>
+ <assignment name="configSource" type="parameter" >
+ <value type="parameter" name="~^\.1\.3\.6\.1\.4\.1\.2636\.3\.18\.1\.7\.1\.4\..*" matches=".*" result="${0}" />
+ </assignment>
+ <assignment name="configUser" type="parameter" >
+ <value type="parameter" name="~^\.1\.3\.6\.1\.4\.1\.2636\.3\.18\.1\.7\.1\.5\..*" matches=".*" result="${0}" />
+ </assignment>
+ </mapping>
+ </mappings>
+ </event-translation-spec>
+
+ <!-- VOLTHA translators to attach the nodeid value to an alarm -->
+ <event-translation-spec uei="uei.opennms.org/vendor/voltha/alarmRaised">
+ <mappings>
+ <mapping>
+ <assignment type="field" name="nodeid">
+ <value type="sql" result="select case when b.count > 0 then b.nodeid else 0 end as nodeid from (select nodeid, a.nodelabel, count from node right outer join (select cast(? as text) as nodelabel, count(*) from node where nodelabel=?) as a on node.nodelabel=a.nodelabel) as b">
+ <value type="parameter" name="ResourceId" matches=".*" result="${0}"/>
+ <value type="parameter" name="ResourceId" matches=".*" result="${0}"/>
+ </value>
+ </assignment>
+ <assignment type="field" name="uei">
+ <value type="constant" result="uei.opennms.org/vendor/voltha/alarmRaisedCorrelated"/>
+ </assignment>
+ <assignment type="field" name="severity">
+ <value type="field" name="severity" matches=".*" result="${0}" />
+ </assignment>
+ </mapping>
+ </mappings>
+ </event-translation-spec>
+ <event-translation-spec uei="uei.opennms.org/vendor/voltha/alarmCleared">
+ <mappings>
+ <mapping>
+ <assignment type="field" name="nodeid">
+ <value type="sql" result="select case when b.count > 0 then b.nodeid else 0 end as nodeid from (select nodeid, a.nodelabel, count from node right outer join (select cast(? as text) as nodelabel, count(*) from node where nodelabel=?) as a on node.nodelabel=a.nodelabel) as b">
+ <value type="parameter" name="ResourceId" matches=".*" result="${0}"/>
+ <value type="parameter" name="ResourceId" matches=".*" result="${0}"/>
+ </value>
+ </assignment>
+ <assignment type="field" name="uei">
+ <value type="constant" result="uei.opennms.org/vendor/voltha/alarmClearedCorrelated"/>
+ </assignment>
+ <assignment type="field" name="severity">
+ <value type="field" name="severity" matches=".*" result="${0}" />
+ </assignment>
+ </mapping>
+ </mappings>
+ </event-translation-spec>
+
+ </translation>
+
+</event-translator-configuration>