Alarme, Traps und Autoacknowledge

Posted: 4th April 2012 by marcel in OpenNMS
Tags: , , , , ,

In den ersten Anfängen hatte ich öfters die Situation, dass man zu einem Event (Problem) eine Notification erstellt hatte. Beim entsprechenden „Gegen-Event“ (Problemlösung) natürlich auch. Auf die Dauer und durch eine entsprechende Anzahl von Events/Notifications wurde das irgendwie recht wartungsintensiv, da man oft Notifications (oder auch Alarme) über die GUI bestätigen musste.

Das kann man vereinfachen! Man kennt es schon von nodeUp/Down Events. Diese Alarme werden automatisch „ge-cleared“. Auch deren Notifications. In den Emails dazu sieht man dann z.B. ein „RESOLVED“.
Und genau dieses Verhalten kann man für jedes Event einrichten.

Hier ein Beispiel anhand des Events beNTUnloaded von BackupExec. Dieses tritt ein, wenn der BackupExec Dienst auf dem Server deaktiviert wird.

<!-- /etc/opennms/events/BackupExec.events.xml -->
<event>
        <mask>
                <maskelement>
                        <mename>id</mename>
                        <mevalue>.1.3.6.1.4.1.1302.3.1.1.9</mevalue>
                </maskelement>
                <maskelement>
                        <mename>generic</mename>
                        <mevalue>6</mevalue>
                </maskelement>
                <maskelement>
                        <mename>specific</mename>
                        <mevalue>2</mevalue>
                </maskelement>
        </mask>
        <uei>uei.opennms.org/mib2opennms/beNTUnloaded</uei>
        <event-label>Backup-Exec-MIB defined trap event: beNTUnloaded</event-label>
        <descr>
&lt;p&gt;The application has stopped.&lt;/p&gt;&lt;table&gt;
        &lt;tr&gt;&lt;td&gt;&lt;b&gt;

        messageText&lt;/b&gt;&lt;/td&gt;&lt;td&gt;
        %parm[#1]%;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;b&gt;

        serverName&lt;/b&gt;&lt;/td&gt;&lt;td&gt;
        %parm[#2]%;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;b&gt;

        appInfo&lt;/b&gt;&lt;/td&gt;&lt;td&gt;
        %parm[#3]%;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
        </descr>
                <logmsg dest='logndisplay'>&lt;p&gt;
                        beNTUnloaded trap received
                        messageText=%parm[#1]%
                        serverName=%parm[#2]%
                        appInfo=%parm[#3]%&lt;/p&gt;
                </logmsg>
        <severity>Major</severity>
<alarm-data
           reduction-key="%uei%:%dpname%:%nodeid%"
           alarm-type="1" auto-clean="false"/>
</event>

Dieses Event wurde mit mib2opennms generiert. Einzig hinzugefügt wurde händisch der alarm-data Teil:

<alarm-data
            reduction-key="%uei%:%dpname%:%nodeid%"
            alarm-type="1" auto-clean="false"/>

Das hier ist beNTLoaded. Das Gegenstück zu beNTUnloaded. Es tritt ein, wenn der Agent wieder online ist.

<!-- /etc/opennms/events/BackupExec.events.xml -->
<event>
        <mask>
                <maskelement>
                        <mename>id</mename>
                        <mevalue>.1.3.6.1.4.1.1302.3.1.1.9</mevalue>
                </maskelement>
                <maskelement>
                        <mename>generic</mename>
                        <mevalue>6</mevalue>
                </maskelement>
                <maskelement>
                        <mename>specific</mename>
                        <mevalue>1</mevalue>
                </maskelement>
        </mask>
        <uei>uei.opennms.org/mib2opennms/beNTLoaded</uei>
        <event-label>Backup-Exec-MIB defined trap event: beNTLoaded</event-label>
        <descr>
&lt;p&gt;The application has started.&lt;/p&gt;&lt;table&gt;
        &lt;tr&gt;&lt;td&gt;&lt;b&gt;

        messageText&lt;/b&gt;&lt;/td&gt;&lt;td&gt;
        %parm[#1]%;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;b&gt;

        serverName&lt;/b&gt;&lt;/td&gt;&lt;td&gt;
        %parm[#2]%;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;b&gt;

        appInfo&lt;/b&gt;&lt;/td&gt;&lt;td&gt;
        %parm[#3]%;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
        </descr>
                <logmsg dest='logndisplay'>&lt;p&gt;
                        beNTLoaded trap received
                        messageText=%parm[#1]%
                        serverName=%parm[#2]%
                        appInfo=%parm[#3]%&lt;/p&gt;
                </logmsg>
        <severity>Cleared</severity>
<alarm-data
            reduction-key="%uei%:%dpname%:%nodeid%"
            alarm-type="2"
            clear-key="uei.opennms.org/mib2opennms/beNTUnloaded:%dpname%:%nodeid%" auto-clean="false"/>


</event>

Auch hier wurde der alarm-data Teil händisch hinzugefügt.

<alarm-data
            reduction-key="%uei%:%dpname%:%nodeid%"
            alarm-type="2"
            clear-key="uei.opennms.org/mib2opennms/beNTUnloaded:%dpname%:%nodeid%" auto-clean="false"/>

Interessant hierbei ist der clear-key. Anhand der UEI, dem Displaynamen und der NodeID wird das zu „clearende“ Event identifiziert. Durch diese beiden Einträge wird nun aus dem Event ein Alarm. Und beNTLoaded „cleared“ beNTUnloaded.

Nun zur Notification zum Event beNTUnloaded:

<!-- /etc/opennms/notifications.xml -->
    <notification name="Backup_Exec: Dienst aus" status="on" writeable="yes">
        <uei>uei.opennms.org/mib2opennms/beNTUnloaded</uei>
        <rule>(IPADDR IPLIKE *.*.*.*)</rule>
        <destinationPath>admin</destinationPath>
        <text-message>%parm[#1]%&#xd;
--------------------------&#xd;
%parm[#3]%&#xd;
--------------------------&#xd;
%parm[#4]%</text-message>
        <subject>#%noticeid%: BackupExec: Dienste inaktiv!</subject>
        <numeric-message>111-%noticeid%</numeric-message>
    </notification>

Damit diese Nachricht nun auch automatisch bestätigt wird, wenn beNTLoaded eintritt muss man in der notifd-configuration.xml etwas hinzufügen:

    <auto-acknowledge resolution-prefix="BEHOBEN: "
        uei="uei.opennms.org/mib2opennms/beNTLoaded" acknowledge="uei.opennms.org/mib2opennms/beNTUnloaded">
        <match>nodeid</match>
    </auto-acknowledge>

Dort werden einfach nur die entsprechenden UEIs eingetragen und fertig.

Ich habe mir inzwischen angewöhnt, jede importierte MIB (also die resultierende *.events.xml Datei) noch mal zu überarbeiten. D.h. schauen ob es Events gibt, die sich gegenseitig aufheben sollen und dort die alarm-keys mit rein (sofern es ein Alarm auslösen soll). Auch die Severity steht meist auf Indeterminate was recht unpassend ist für ein Event wie z.B. alertThermalShutdown :-)

BackupExec Events: Die BE Events, die bei NMS 1.10 dabei sind, beinhalten weniger Trapdefinitionen als die original MIB von Symantec. Ich habe mal eine mib2opennms-generierte Version hochgeladen. Die Severity ist nach eigenem Ermessen definiert. Am besten noch mal drüber schauen.
BackupExec.events.xml