- Beschreibung der Lösung
Die Lösung bezieht sich auf UCS 1.3.5 und als Beispiel HP Pro Curve Switche
- Einführung
Diese Applikationsbeschreibung beschreibt die Vorgehensweise für die Einbindung von SNMP-Traps in NAGIOS, im speziellen mit Authentication-Traps die von HP-Switches gesendet wer-den. Um SNMP-Traps auf einem Server zu empfangen benötigt man wie bei aktiven SNMP-Abfragen das Paket Net-SNMP (net-snmp.org/).
- SNMPTRAPD
3.1. Startup snmptrapd
Als erstes muss dafür gesorgt werden das der SNMPTRAP Demon (snmptrapd) richtig und bei jedem Systemstart gestartet wird. Dies erreicht man zum Beispiel durch ein ausführbares Skript in /etc/rc.boot, mit folgendem Inhalt: #!/bin/sh
/usr/sbin/snmptrapd -m All -Oa
Achtung: Dies kann je nach Distribution unterschiedlich sein.
3.2. snmptrapd-Konfiguration (/etc/snmp/snmptrapd.conf)
Als nächstes muss die Konfiguration des SNMPTRAP Demons vorgenommen werden, in die-sem Beispiel wird die snmptrapd-Version 5.2.1.2 behandelt. Es ist zu beachten, dass sich die Konfiguration ab Version 5.3 stark verändert hat. Wir benötigen nur das token traphandle:
traphandle OID Programm Parameter bzw.
traphandle default Programm Parameter
traphandle kann auf bestimmte OIDs hin Programme mit Parametern ausführen, oder wenn statt der OID default angegeben wird auf alle anderen Traps reagieren. Hier ein Beispiel für die snmptrapd.conf:[code]# default Fall
traphandle default /etc/nagios2/conf.trap.d/handle-trap-test default
spezielle OID
traphandle SNMPv2-MIB::authenticationFailure /etc/nagios2/conf.trap.d/trap-auth-switch authFail [/code]
Die einzelnen Anweisungen müssen jede in einer Zeile stehen, außerdem empfiehlt es sich Kommentare hinzuzufügen. OIDs können auch numerisch angegeben werden.
Die Daten der Traps werden dem ausgeführten Programm über die Standardeingabe überge-ben, in der ersten Zeile der hostname, dann die IP-Adresse, und anschließend mehrere Zeilen mit Trap Variablen. Diese verarbeitet man am einfachsten über ein Skript wie dieses:[code]#!/bin/bash
#handle-trap-test
#Verwendung: TestSkript zum loggen von SNMP-Traps
#erstellt am: 29.10.08
#Autor: B.Neumann
#Version: V1-0
#Änderungen
LOGFILE="/etc/nagios2/conf.trap.d/handle_trap.log"
#LOGFILE="/dev/null" Zum deaktivieren des Loggings
DATE=date
echo "$1 Trap am $DATE " >> $LOGFILE
read host
echo “host: $host” >> $LOGFILE
read ip
echo “ip: $ip” >> $LOGFILE
read var1
echo “var1: $var1” >> $LOGFILE
read var2
echo “var2: $var2” >> $LOGFILE
read var3
echo “var3: $var3” >> $LOGFILE
read var4
echo “var4: $var4” >> $LOGFILE
read var5
echo “var5: $var5” >> $LOGFILE
read var6
echo “var6: $var6” >> $LOGFILE
read var7
echo “var7: $var7” >> $LOGFILE
read var8
echo “var8: $var8” >> $LOGFILE
read var9
echo “var9: $var9” >> $LOGFILE
read var10
echo “var10: $var10” >> $LOGFILE[/code]
Anschließend können die eingelesenen Daten je nach Bedarf verarbeitet werden, und dann direkt an Nagios (siehe auch 4.2 Übergabe der Traps), oder durch ein weiteres Skript weiterge-leitet werden. Das folgende Skript ist nur für die Übergabe der Traps an Nagios. Es bekommt die Trap-Daten als Parameter und erzeugt daraus den externen Befehl für Nagios. [code]#!/bin/bash
submit-traps
Verwendung: Script zur Weiterleitung von SNMP Traps an /var/lib/nagios2/rw/nagios.cmd
Parameter: $1 Hostname $2 Service $3 Level( 0 - i.O., 1 - Warning, 2 - Critical) $4 Textausgabe
erstellt am: 04.11.2008
Autor: B.Neumann
Version: V1-0
Änderungen:
#LOGFILE="/etc/nagios2/conf.trap.d/handle_trap.log"
LOGFILE="/dev/null"
CMDFILE="/var/lib/nagios2/rw/nagios.cmd"
TIME=date +%s
DATE=date
HOST=$1
SERVICE=$2
LEVEL=$3
OUTPUT=$4
CMD="[$TIME] PROCESS_SERVICE_CHECK_RESULT;$HOST;$SERVICE;$LEVEL;$OUTPUT"
echo “Erzeugtes Kommando von submit-traps vom $DATE:” >>$LOGFILE
echo “$CMD” >> $LOGFILE
/bin/echo $CMD >> $CMDFILE[/code]
- NAGIOS
4.1. Konfiguration
Um Traps in Nagios zu verarbeiten, müssen folgende Einstellungen in der nagios.cfg (/etc/nagios2/) vorgenommen werden:
Nagios muss Passive Checks und externe Kommandos akzeptieren:
• Enable Service Checks: accept_passive_service_checks=1
• Enable Host Checks: accept_passive_host_checks=1
• check_external_commands=1
• command_check_interval=-1 (in Sekunden, -1 -> sooft wie möglich)
• command_file=/var/lib/nagios2/rw/nagios.cmd
4.2. Übergabe der Traps
Die Traps werden an Nagios übergeben, indem sie in eine Pipe (/var/lib/nagios2/rw/nagios.cmd) geschrieben werden, die Nagios dann ausliest. Über diese Pipe können verschiedene Befehle verarbeitet werden, uns interessiert aber nur PROCESS_SERVICE_CHECK_RESULT:PROCESS_SERVICE_CHECK_RESULT;<host_name>;<service_description>;<return_code>;<plugin_output>
<host_name>: hostname des Geräts von dem der Trap kommt
<service_description>: Beschreibung des Services (muss mit der Service Definition überein stimmen)
<return_code>: Einstufung des Ereignisses (0 – Ok, 1 – Warning, 2 – Critical, 3 – Unknown)
<plugin_output>: Text mit der Beschreibung des Ereignisses
Wichtig: Da snmptrapd den hostnamen über die Funktion gethostbyaddr() bestimmt, müssen Geräte von denen Traps empfangen werden, im DNS-Server mit Reverse-Lookup eingetragen werden, sonst funktioniert die Auflösung der Adresse nicht.
4.3. Servicedefinitionen und -gruppen
Jetzt müssen noch die entsprechenden Service Definitionen eingetragen werden. Im Fall der Switches je Spielbank in /etc/nagios2/conf.local.d/switches/xxx-switches.cfg. Der entsprechende Eintrag sieht wie folgt aus:[code]# Service definition AUTH-TRAP
define service {
host_name hostname
service_description AUTH-TRAP
is_volatile 1
check_period 24x7
normal_check_interval 5
retry_check_interval 1
passive_checks_enabled 1
check_freshness 0
max_check_attempts 1
contact_groups admins
notification_interval 1440
notification_period 24x7
notification_options w,c,r
check_command return-ok
} [/code]
Um alle Trap Services zu einer Servicegruppe zusammenzufassen fügen wir in der Konfigurati-onsdatei /etc/nagios2/conf.local.d/servicegroups.cfg folgenden Eintrag ein:# SNMP-TRAPS
define servicegroup {
servicegroup_name snmp-traps
alias SNMP - Traps
}
5. HP ProCurve Konfiguration
Um die HP-Switches so zu konfigurieren, dass sie die gewünschten Traps versenden müssen folgende Schritte durchgeführt werden:
- Anmelden über Telnet
- Mit dem Befehl config in den Konfigurationsmodus wechseln
- Überprüfen ob die Community „public“ existiert: [show snmp-server]
o Wenn nicht, anlegen: [snmp-server community public manager restricted]
- Trap Receiver einrichten: [snmp-server host public Empfänger all]
- Authentication-Traps aktivieren: [snmp-server enable traps authentication]
A.Sebald
B.Neumann