Überwachung perl-Skripte – OpenNMS

Posted: 8th März 2012 by Thorben Hemmler in OpenNMS

Erstmal braucht mal einen Perl-Klasse. Die sieht so aus:

#!/usr/local/bin/perl -W

# Klasse fuer Fehlermeldungen (lokale Variablen) und Warnungen
use strict;
use warnings;

package open_nms;
use vars qw(@ISA @EXPORT);
use Exporter;
@ISA= ('Exporter');
@EXPORT = qw(
             &Sende_OpenNMS_Fehler
             &Sende_OpenNMS_OK
            );

# Script für das OpenNMS
my $Send_event = '/usr/local/bin/send-event.pl';

# die einzelnen Variablen
my $ONMS_UEI_OK = 'uei.opennms.org/Custom/opennms/ScriptSuccess';
my $ONMS_UEI_FAILED = 'uei.opennms.org/Custom/opennms/ScriptFailed';
my $ONMS_NODEID = 815;
my $ONMS_IF = '192.168.2.1';
my $ONMS_EVTSRV = '1.2.3.4';
my $JRB_DATA = '';

#
my $Fehler = 0;
my $Befehl = '';

#
# Umlaute ersetzen
#
sub fix_umlaute {
        my $str = shift;

  # Leerstring?
        if (! defined $str) {
                $str = '';
        }

        if ($str eq '') {
                return $str;
        }

        $str =~ s/Ä/Ae/g;
        $str =~ s/Ö/Oe/g;
        $str =~ s/Ü/Ue/g;
        $str =~ s/ä/ae/g;
        $str =~ s/ö/oe/g;
        $str =~ s/ü/ue/g;
        $str =~ s/ß/ss/g;

        return $str;
}

#
# eine Fehlermeldung an das OpenNMS schicken
#
sub Sende_OpenNMS_Fehler {
        my $Fehlermeldung = shift;
        if (! defined $Fehlermeldung) {
                $Fehlermeldung = '';
        }

        $Fehlermeldung = &fix_umlaute($Fehlermeldung);

  # ${SEND_EVENT} ${ONMS_UEI_OK} ${ONMS_EVTSRV} -n ${ONMS_NODEID} -i ${ONMS_IF} -x 6 -p "desc Backup-Script ${JRB_DATA} successful (backup1:/usr/local/scripte/webserver/backup_server2.sh)"
        my $Befehl = sprintf("%s %s %s -n %s -i %s -x 6 -p "desc %s"",
                       $Send_event,
                             $ONMS_UEI_FAILED,
                             $ONMS_EVTSRV,
                             $ONMS_NODEID,
                             $ONMS_IF,
                             $Fehlermeldung
                            );
        system ($Befehl);
  die "FEHLER: $Fehlermeldung\n";
}

#
# ein "Alles OK" an das OpenNMS schicken
#
sub Sende_OpenNMS_OK {
        my $Meldung = shift;
        if (! defined $Meldung) {
                $Meldung = '';
        }

        $Meldung = &fix_umlaute($Meldung);

  # ${SEND_EVENT} ${ONMS_UEI_OK} ${ONMS_EVTSRV} -n ${ONMS_NODEID} -i ${ONMS_IF} -x 3 -p "desc Backup-Script ${JRB_DATA} successful (backup1:/usr/local/scripte/webserver/backup_server2.sh)"
        $Befehl = sprintf("%s %s %s -n %s -i %s -x 3 -p "desc %s"",
                          $Send_event,
                          $ONMS_UEI_OK,
                          $ONMS_EVTSRV,
                          $ONMS_NODEID,
                          $ONMS_IF,
                          $Meldung
                         );
        system($Befehl);                        
}

1;

Auf die Funktionen kann man dann mit

# openNMS
use lib „/disk/scripte/“;
use open_nms;

zugreifen.

So könnte das dann im Script aussehen:

#!/usr/local/bin/perl -W

# Klasse fuer Fehlermeldungen (lokale Variablen) und Warnungen
use strict;
use warnings;

# Klasse für Datenbankzugriffe
use DBI;

# openNMS
use lib "/disk/scripte/";
use open_nms;

# Verbindung zur Datenbank
my $DBHandle = DBI->connect('DBI:mysql:database=voiceacct;host=dbhost;port=3306', 'user', 'pass')
                                      or &Sende_OpenNMS_Fehler("Kann keine Verbindung zum MySQL-Server aufbauen: $DBI::errstr");

print "Alles gut\n";
&Sende_OpenNMS_OK('Testscript durchgeführt');
exit(0);

Entsprechende Events gibt es auch:

<events>
    <event>
        <uei>uei.opennms.org/Custom/opennms/ScriptSuccess</uei>
        <event-label>Custom-defined event OpenNMS Script success</event-label>
        <descr>OpenNMS Script successful</descr>
        <logmsg dest="logndisplay">OpenNMS: %parm[desc]%.</logmsg>
        <severity>Normal</severity>
    </event>
    <event>
        <uei>uei.opennms.org/Custom/opennms/ScriptFailed</uei>
        <event-label>Custom-defined event OpenNMS Script failed</event-label>
        <descr>OpenNMS Script failed</descr>
        <logmsg dest="logndisplay">OpenNMS: %parm[desc]%.</logmsg>
        <severity>Minor</severity>
        <alarm-data reduction-key="%uei%:%parm[desc]%" alarm-type="1" auto-clean="false" />
    </event>
</events>