Translations of this page:

SNMP-Traps verarbeiten

Oftmals ist das Verarbeiten von SNMP-Traps die einzige Möglichkeit, Geräte in Nagios zu integrieren.

Mögliche Einbindung

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.

Vorteile von SNMPTT

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.

Warum eine Datenbank ?

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.

Installation SNMPTT

  • SNMPTT bei Sourceforge downloaden.
  • Installiert wird SNMPTT wie hier beschrieben.
    • Testen, ob sich snmptt ohne Fehler starten lässt. Meist fehlen noch einige Perl-Module. Welche Module benötigt werden, steht hier. SuSE 9.3 liefert alle benötigten Module auf der DVD mit.
    • Bei einer SuSE 9.3 ist kein Init-Skript für den snmptrapd enthalten. Entweder man schreibt ein eigenes oder schreibt /etc/init.d/snmpd so um, dass zusätzlich zum snmpd auch der snmptrapd gestartet wird.
  • snmptrapd nimmt die Traps entgegen und reicht sie an SNMPTT weiter. Dies geschieht über die Config-Datei des snmptrapd.
  • /etc/snmptrapd.conf anlegen.
     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>
  • Jetzt kann der snmptrapd testweise gestartet werden.
    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.

SNMPTT konfigurieren

Eine brauchbare Anleitung findet sich hier.

SNMPTT-Frontend

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 PHP-Frontend für SNMPTT
  • Das Plugin check_snmp_traps (Bash-Skript)
  • snmptt.sql mit der Struktur der Mysql-Datenbank, einschließlich der Tabelle snmptt für bekannte Traps.

Das Paket wird im Nagios-share-Verzeichnis entpackt. Dabei entsteht das Verzeichnis „snmptraps“.

Datenbank anlegen

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.

Plugin check_snmp_traps

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.

Das PHP Frontend

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.

Nagios Service Extinfo

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$
        }

TODO-Liste

  • Erstellen einer Dokumentation
  • Eine neue Funktion, die es erlaubt hinter jedem Trap ein Kommanter hinterlegen zu können.
  • Erstellen eine Alias-Funktion, die es erlaubt eingehende Traps mit einem anderen Hostnamen, als im Nagios angelegt, abzugleichen.
  • Funktion die erlaubt, die Message eines Traps inklusive aller hinterlegten Kommentare als eMail versenden zu können.
  • Eine neue Funktion, die es erlaubt nicht benötigte Traps auszublenden und automatisch aus der DB zu löschen lassen.
  • Alle Traps von Host anzeigen, die der jeweilig angemeldete User berechtigt ist zu sehen.

F.A.Q

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

nagios/howtos/snmptt.txt · Zuletzt geändert: 2011/12/06 16:59 von misterdee
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0