Oftmals ist das Verarbeiten von SNMP-Traps die einzige Möglichkeit, Geräte in Nagios zu integrieren.
Ethan erklärt in der Nagios-Dokumentation ein Szenario, bei dem die Traps über ein Shell-Skript analysiert und als passiver Check an Nagios übermittelt werden. Wird ein Trap empfangen, geht der entsprechende Service im Nagios auf Critical. Kommt der nächste Trap, wird der Status überschrieben. Man hat also keine Historie, wann welcher Trap aufgelaufen ist.
SNMPTT ist in Perl geschrieben und übernimmt die Traps vom snmptrapd. SNMPTT ist nun in der Lage anhand der Config zu erkennen was mit einem Trap geschehen soll.
SNMPTT kann nicht nur Traps anhand der OID klassifizieren, sondern kann auch anhand des Inhalts des Traps unterschiedliche Informationen speichern.
So ist es möglich auch Traps von Geräten zu verarbeiten die nur einen Trap kennen, aber im Text die eigentliche Information senden. Die Option MATCH kann also anhand des Inhalts entscheiden ob es sich im einen WARNING oder CRITICAL Trap handelt, nicht nur anhand der Trap OID.
Jeder Trap, der SNMPTT bekannt ist, wird in eine Datenbank geschrieben und somit gesammelt. Nagios bekommt nun ein Plugin in Form eines kleinen Shell-Skripts, das prüft, ob für den Host ein Trap eingegangen ist, der noch nicht bestätigt wurde und den Status CRITICAL oder WARNING hat.
Über ein PHP-Skript werden die Traps angezeigt und ggf. bestätigt oder gelöscht. Ist ein Trap in der Datenbank bestätigt worden, wird der Service im Nagios wieder OK.
echo "traphandle default /usr/local/sbin/snmptt" > /etc/snmptrapd.conf
Der Eintrag „traphandle default“ bedeutet, dass jeder eingehende Trap an den snmptt übergeben wird.
Ab NET-SNMP Version 3.0x muss als erste Zeile noch der Eintrag „disableAuthorization yes“ in “/etc/snmptrapd.conf“ eingefügt werden. Anderenfalls werden per default alle eingehenden Traps abgelehnt(mangels Autorisierung).
— crocodile 2006/12/23 17:29
Alternativ erlaubt man die Authentifizierung über den Community-String (für SNMP v1 und 2) mit
authCommunity log,execute,net <community>
snmptrapd -On -C -c /etc/snmptrapd.conf
Wichtig ist die Option -On, die bewirkt, das die OIDs der Traps numerisch an SNMPTT übergeben werden. Möchte man nur die IP-Adressen und nicht die Hostnamen übergeben, muss man zusätzlich den Schalter -n benutzen.
Eine brauchbare Anleitung findet sich hier.
Michael Lübben hat die erste Version eines SNMPTT-Frontends in PHP geschrieben. Das Tool ist nicht zu verwechseln mit dem SNMPTT-GUI-Projekt.
Die auf dem Nagios-Workshop in Erlangen vorgestellte Version und neue Versionen gibt es hier zum Download.
Das Paket enthält folgende Komponenten
Das Paket wird im Nagios-share-Verzeichnis entpackt. Dabei entsteht das Verzeichnis „snmptraps“.
Zuerst legt man die Datenbank „snmptt“ mit dem Befehl
mysqladmin create snmptt
an.
Danach wird die Datenbankstruktur aus snmptt.sql erstellt:
mysql snmptt -u root -p < snmptt.sql
Die Struktur unterscheidet sich vom Original durch das Feld „trapread“. Dieses Feld wurde zusätzlich hinzugefügt, um einzelne Traps als gelesen zu kennzeichnen.
Das Auslesen der in der Datenbank gespeicherten Traps übernimmt das Plugin check_snmp_traps. check_snmp_traps wird bei den anderen Plugins im Verzeichnis libexec abgelegt.
Das Plugin ist ein Bash-Skript. In den ersten Zeilen muss der zu verwendende DB-User mit Passwort eingetragen werden. Danach kann das Plugin als User nagios getestet werden:
check_snmp_traps -H <ip-adresse oder hostname>
Ob der Hostname oder die IP-Adresse angegeben werden muss, ist davon abhängig, wie das Feld „hostname“ in der Datenbank gefüllt wird. Dies hängt von den Einstellungen in der snmptt.ini ab.
Ebenso wie das Plugin check_snmp_trap benötigt das Frontend zuerst die Zugagsdaten zur Mysql Datenbank. Dies erfolgt in der Datei snmptraps/etc/config.ini.php. Ist dies geschehen, kann das Frontend zum erstem mal aufgerufen werden.
Die URL lautet http://<nagios-server>/nagios/snmptraps/index.php
Bei diesem Aufruf werden keine Filter gesetzt. Es werden also alle Traps angezeigt.
http://<nagios-server>/nagios/snmptraps/index.php?hostname=<name des hosts>
Zeigt nur Traps die vom angegebenen Host stammen. Dies ist auch die URL die über die Service Extinfo verlinkt wird.
Die Nagios Service Extinfo sollte so aussehen:
define serviceextinfo {
host_name < NAGIOS HOST >
service_description SNMP Alerting
notes SNMP Alerts
notes_url http://<servername>/nagios/snmptraps/index.php?hostname=$HOSTADDRESS$
}
Problem: Ich bekomme folgende Fehlermeldung Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 35 bytes) in /usr/local/nagios/share/snmptraps/….
Lösung:
Folgende Zeile in der php.ini suchen:
memory_limit = 8M
und diesen Wert auf 16M erhöhen.
memory_limit = 16M
Jetzt den Apache neustarten und dann sollte es funktionieren!
— MiCkEy2002 19.09.2006 08:52
Problem: Beim öffnen des Frontends kommt folgende Fehlermeldung:
Aktueller Trap Log -------------------------------------------------------------------------------- Datenbankfehler Konnte keine Verbindung zur Datenbank herstellen! Bitte überprüfen Sie die Konfiguration... Error: Access denied for user 'www-data'@'localhost' (using password: NO)
Lösung: Im NagTrap Config File die Zeichen
,'
aus der Liste der illegalen Zeichen entfernen. Also von:
;# Set here illegal charactars for output of the javabox illegalCharJavabox = <,>,'
In
;# Set here illegal charactars for output of the javabox illegalCharJavabox = <,>
ändern. Nun sollte der DB-Connect funktionieren
— misterdee 06.12.2011 16:59