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:
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:
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.