SNMP-Traps mit NAGIOS - gelöst

german

#1

Hallo Forum,

hat schon jemand Erfahrung mit dem Einbinden von SNMP-Traps in NAGIOS?
Wir haben eine schöne Installation von NAGIOS am laufen, aber nur aktive Abfragen. Nun haben wir aber Komponenten, die nur SNMP-Traps senden lönnen. Wie können die mit NAGIOS abgefangen werden. Ich möchte eigentlich keine eigene Datenbank dafür aufziehen.

Beste Grüße


Lösung s.u.


#2

Hallo,

wir haben bisher keinerlei Erfahrungen mit der Einbindung von SNMP-Traps in Nagios gemacht. Eventuell helfen Ihnen die folgenden Hinweise in der Nagios Dokumentation bei der Einrichtung: http://nagios.sourceforge.net/docs/2_0/int-snmptrap.html

Wir würden uns natürlich sehr freuen wenn Sie Fortschritte und/oder Lösungen hier dokumentieren würden.

Mit freundlichen Grüßen
Janis Meybohm


#3

Hier findet sich reichlich nette Doku:

nagios-wiki.de/?do=search&id=snmp
nagios-portal.de/

Grüße von der Open-Xchange,
Daniel Halbe


#4
  1. Beschreibung der Lösung
    Die Lösung bezieht sich auf UCS 1.3.5 und als Beispiel HP Pro Curve Switche
  2. 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/).
  3. 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]

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


#5

Hallo Herr Neumann,

wie ich sehe, kennen Sie sich recht gut mit den 2824 von HP aus.

[quote]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][/quote]

Ich hätte hierzu 2 Fragen.

1: Ich würde gern snmp-server + snmpv3 deaktivieren.
2: Ich würde gern sflow aktiveren.

Gibt es denn Probleme wenn ich snmp + sflow gleichzeitig laufen lasse? Da ich die Traffic-Daten per sflow auslesen möchte, benötige ich doch garkein snmp (?).
Würde doch nur Switch Ressis verbraten. Zumindest aus meiner Sicht.

Ausserdem. Wenn ich show snmpv3 targetadress eingebe, erhalte ich folgendes:

[code]HP ProCurve Switch 2824(config)# show snmpv3 enable

Status and Counters - SNMP v3 Global Configuration Information

SNMP v3 enabled : Yes

HP ProCurve Switch 2824(config)# show snmpv3 targetaddress

snmpTargetAddrTable [rfc2573]

Target Name IP Address Parameter


1 192.168.0.17 1[/code]

Die configuration von sflow hab ich leider noch nicht hinbekommen… vermutlich brauche ich aber auch hier eine Ziel IP Adresse. Die kann ich ja dann nicht auch noch über die 192.168.0.17 laufen lassen. Oder doch, weil es 2 verschiedende Protokolle sind.

Aber dann sehe ich das Problem das über diesen Port doppelte Daten drübergehen … was bei viele Traffic den Port dichtmacht. (24er Switch = 23 Port a 1 GB auf 1 Protokoll Port)

Das ganze ist zwar etwas offtopic… aber ich hoffe dennoch, das mir irgendjm. helfen kann.

Vielen Dank