UCD-SNMP (NET-SNMP) Integration


Hinweis: Nagios ist nicht als Ersatz für ein voll aufgeblasenes SNMP Management wie HP OpenView or OpenNMS gedacht. SNMP Traps die ein Rechner in Ihrem Netzwerk empfängt können jedoch so aufbereitet werden, dass diese über Nagios angezeigt werden. Hier wird beschrieben wie das funktioniert ...

Einleitung

Dieses Beispiel beschreibt wie auf einfache Art und Weise Nagios SNMP Traps empfangen, anzeigen und melden kann, die über das Produkt UCD-SNMP snmptrapd entdeckt werden. Die vorgenommenen Anweisungen gehen davon aus, dass der Rechner der die SNMP Traps empfängt und jener auf dem Nagios läuft, voneinader unabhängige Rechner sind. Es bedarf nur weniger Modifikationen, wenn Sie beabsichten beide Produkte am selben Rechner laufen zu lassen. Ich gehe davon aus, dass Sie am Nagios Überwachungsrechner den NSCA Dämon und am Rechner der die SNMP Traps generiert den NSCA Client (send_nsca) installiert haben.

Im angegebenen Beispiel demonstriere ich wie ich Nagios aufgesetzt habe um zu erreichen, dass SNMP Traps meiner Novell Server ArcServe Backup Jobs empfangen und über Nagios abgehandelt werden. Ich möchte darüber informiert werden, wenn Backups mißlingen. Das funktioniert zu meiner vollsten Zufriedenheit. Passen Sie die Beispiele an Ihre Gegebenheiten an.

Service Definition

Zu Allererst müssen Sie für die SNMP Traps ein entsprechendes Service in Ihrem Object Configuration File definieren (in diesem Beispiel definiere ich ein Service für ArcServe-Backup Jobs). Wir nehmen an, dass der Host der die SNMP Traps erzeugt novellserver genannt wird, eine mögliche Service Definition könnte in etwa so aussehen:

define service{
	host_name                       novellserver
	service_description             ArcServe Backup
	is_volatile                     1
	active_checks_enabled		0
	passive_checks_enabled		1
	max_check_attempts              1
	contact_groups                  novell-backup-admins
	notification_interval           120
	notification_period             24x7
	notification_options            w,u,c,r
	check_command                   check_none
	}

Wichtig ist, dass dieses Service die Option volatile aktiviert hat. Wir benötigen diese Option um zu gewährleisten, dass wenn immer ein Alarmmeldung einlangt eine Benachrichtigung erfolgt. Beachten Sie, dass die Option "Active Checks" (active_checks_enabled) deaktiviert und die Option "Passive Checks" (passive_checks_enabled) aktiviert ist. Dadurch wird das definierte Service nie aktiv überprüft - alle Alarminformationen werden passiv vom SNMP Management Host mit Hilfe des nsca client übermittelt. (In meinem Beispiel nenne ich diesen Host Firestorm).

ArcServe und Novell SNMP Konfiguration

Um zu erreichen, dass der ArcServe (und mein Novell Server) SNMP Traps an meinen Management Host übermittelt, mußte ich folgendes tun:

  1. Der ArcServe Autopilot Job ist so anzupassen, dass Jobs bei Beendigung SNMP Traps generieren (Job-Fehler, Successes, usw.)
  2. Hinzufügen der Management Host IP-Adresse im File SYS:\ETC\TRAPTARG.CFG (von dem der die SNMP Traps empfangen soll)
  3. Laden SNMP.NLM
  4. Laden ALERT.NLM um das Senden der SNMP Traps zu erleichtern

SNMP Management Host Konfiguration

Auf meinem Linux SNMP Management Host (Firestorm) habe ich die (NET-SNMP) Software UCD-SNMP installiert. Nach der Installation hatte ich noch folgendes zu machen:

  1. Installation der ArcServe MIBs (zu finden auf der ArcServe Installations CD)
  2. Editieren des snmptrapd Konfigurationfiles (/etc/snmp/snmptrapd.conf) um den Trap Handler für ArcServe Alarme zu definieren. Siehe unten.
  3. Starten des snmptrapd Dämon um die einlangende SNMP Traps empfangen zu können

Nachdem nun der snmptrapd Dämon ArcServe SNMP Traps an unseren Nagios Server sendet, müssen wir den entsprechenden Traphandler im /etc/snmp/snmptrapd.conf File definieren. Das Konfigurationsfile sieht in etwa so aus:

#############################
# ArcServe SNMP Traps
#############################

# Tape format failures
traphandle ARCserve-Alarm-MIB::arcServetrap9 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 9

# Failure to read tape header
traphandle ARCserve-Alarm-MIB::arcServetrap10 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 10

# Failure to position tape
traphandle ARCserve-Alarm-MIB::arcServetrap11 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 11

# Cancelled jobs
traphandle ARCserve-Alarm-MIB::arcServetrap12 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 12

# Successful jobs
traphandle ARCserve-Alarm-MIB::arcServetrap13 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 13

# Imcomplete jobs
traphandle ARCserve-Alarm-MIB::arcServetrap14 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 14

# Job failures
traphandle ARCserve-Alarm-MIB::arcServetrap15 /usr/local/nagios/libexec/eventhandlers/handle-arcserve-trap 15

Das Beispiel geht davon aus, dass Sie ein /usr/local/nagios/libexec/eventhandlers/ Verzeichnis auf Ihrem SNMP Mangement Host angelegt haben und dass darin das Skript handle-arcserve-trap existiert. Sie können dieses Skript gemäß Ihrer Vorstellungen anpassen. Wie auch immer, das handle-arcserve-trap Skript auf meinem Management Host sieht in etwa so aus:

#!/bin/sh

# Arguments:
#  $1 = trap type

	# First line passed from snmptrapd is FQDN of host that sent the trap
     read host

    # Given a FQDN, get the short name of the host as it is setup in NetSaint
    hostname="unknown"
    case $host in
        novellserver.mylocaldomain.com)
            hostname="novellserver"
            ;;
        nt.mylocaldomain.com)
            hostname="ntserver"
            ;;
	esac
	
    # Get severity level (OK, WARNING, UNKNOWN, or CRITICAL) and plugin output based on trape type
    state=-1
    output="No output"
    case "$1" in

        # failed to format tape - critical
        11)
            output="Critical: Failed to format tape"
            state=2
            ;;

        # failed to read tape header - critical
        10)
            output="Critical: Failed to read tape header"
            state=2
            ;;

        # failed to position tape - critical
        11)
            output="Critical: Failed to position tape"
            state=2
            ;;

        # backup cancelled - warning
        12)
            output="Warning: ArcServe backup operation cancelled"
            state=1
            ;;

        # backup success - ok
        13)
            output="Ok: ArcServe backup operation successful"
            state=0
            ;;

        # backup incomplete - warning
        14)
            output="Warning: ArcServe backup operation incomplete"
            state=1
            ;;

        # backup failure - critical
        15)
            output="Critical: ArcServe backup operation failed"
            state=2
            ;;
    esac


    # Submit passive check result to monitoring host
    /usr/local/nagios/libexec/eventhandlers/submit_check_result $hostname "ArcServe Backup" $state "$output"

exit 0

Beachten Sie, dass das handle-arcserve-trap Skript submit_check_result aufruft, um den Alarm an den Monitoring Host zurückzusenden. Angenommen Ihr Monitoring Host wird Monitor genannt, könnte das submit check_result Skript in etwa so aussehen (Sie werden dieses Skript anpassen und den richtigen Pfad des send_nsca Programms am Management Host definieren müssen):

#!/bin/sh

# Arguments
#	$1 = name of host in service definition
#	$2 = name/description of service in service definition
#	$3 = return code
#	$4 = output

/bin/echo -e "$1\t$2\t$3\t$4\n" | /usr/local/nagios/bin/send_nsca monitor -c /usr/local/nagios/etc/send_nsca.cfg

Zum Abschluss

Sie haben nun alles Erforderliche konfiguriert. Sie müssen lediglich Nagios am Monitoring Server durchstarten. Das war's! Sie sollten nun immer wenn ein ArcServe Job beendet wird eine entsprechende Rückmeldung (jobs fail, succeed, usw.) erhalten.