Zabbix Monitoring SNMP Traps empfangen

Der Zabbix-Server kann SNMP-Traps verarbeiten, aber nicht eigenständig annehmen. Dazu braucht Zabbix die Hilfe vom snmptrapd. Sollen die im Trap enthaltenen numerischen OIDs in lesbaren Text umgewandelt werden, braucht Zabbix ein weiteres externen Tool, den SNMP-Trap Translator (snmptt).

Verarbeitungskette von SNMP-Traps.

snmptrapd und snmptt installieren

Auf Debian-Systemen installieren Sie folgende Pakete:

apt-get install snmp snmpd snmptt # Debian/Ubuntu
yum install snmptt perl-Sys-Syslog net-snmp-perl # CentOS/RHEL

Installieren Sie außerdem die gängigen MIBs, wie im Kapitel beschrieben. Standardmäßig wird der snmpd gestartet, also der Daemon, der den Systemstatus per SNMP von extern abfragbar macht. Der snmptrapd ist per Default nicht aktiviert. Dies müssen Sie durch Anpassen der Datei /etc/default/snmpd ändern (Nur Debian/Ubuntu).

TRAPDRUN=yes
SNMPDRUN=no

Öffnen Sie die Konfigurationsdatei des Trapper Daemons und veranlassen Sie, dass der Trapper Daemon alle empfangenen Traps an den Trap Translate Daemon weiterleitet.

Für Debian/Ubuntu tragen Sie in /etc/snmp/snmptrapd.conf folgendes ein:

traphandle default /usr/sbin/snmptt
disableAuthorization yes

Für CentOS/RHEL tragen Sie in /etc/snmp/snmptrapd.conf folgendes ein:

authCommunity execute public
traphandle default /usr/sbin/snmptt

Der Zabbix-Server erwartet, dass die Meldungen der Traps in einem bestimmten Format „reinkommen“, was nicht dem Standard entspricht. Öffnen Sie die Datei /etc/snmp/snmptt.ini und ändern Sie die nachfolgenden Einstellungen:

mode = standalone
translate_log_trap_oid = 2
net_snmp_perl_enable = 1
date_time_format = %H:%M:%S %Y/%m/%d
log_file = /tmp/zabbix_traps.tmp
log_system_enable = 1
mibs_environment = ALL

Legen Sie ein Backup der Datei /etc/snmp/snmptt.conf an:

mv /etc/snmp/snmptt.conf /etc/snmp/snmptt.conf.orig

Tragen Sie anschließend in eine neue leere Datei /etc/snmp/snmptt.conf nur die folgenden zwei Zeilen ein.

EVENT general .* „General event“ Normal
FORMAT ZBXTRAP $aA $ar severity:$s $Fn$+*

Wenn Sie mehr Information aus einem SNMP-Trap an Zabbix weiterleiten wollen, fügen Sie ggf. mehr Variablen ein. Eine Liste aller Variablen, die snmptt befüllen kann, finden Sie auf der Projekt-Webseite.


Senden Sie einen Test-Trap und schauen Sie sich an, was snmptt in die Datei schreibt, die später vom Zabbix-Server eingelesen wird. Das folgende Beispiel informiert per SNMP, dass ein Netzwerklink nicht mehr verfügbar ist.

snmptrap -v 1 -c public 127.0.0.1 '.1.3.6.1.6.3.1.1.5.3' '0.0.0.0' 6 33 '55' .1.3.6.1.6.3.1.1.5.3 s "teststring000"
tail /tmp/zabbix_traps.tmp 
16:31:18 2013/10/28 IF-MIB::linkDown.0.33 Normal „General event“ localhost - ZBXTRAP 127.0.0.1 127.0.0.1

Zabbix-Server und Proxy konfigurieren

Per Standard empfängt der Zabbix-Server keine SNMP-Traps. Öffnen Sie die Datei zabbix_server.conf und ändern Sie die nachfolgenden zwei Zeilen. Wenn Sie Proxys einsetzen, müssen Sie den Empfang von Traps analog zum Server auch in der Datei zabbix_proxy.conf aktivieren. Die Datei, aus der Zabbix-Server oder -Proxy die Meldungen der Traps liest, muss exakt mit der Datei übereinstimmen, in die snmptt die Meldungen schreibt.

SNMPTrapperFile=/tmp/zabbix_traps.tmp
StartSNMPTrapper=1

Starten Sie anschließend den Zabbix-Server oder den Proxy neu.

Items und Trigger einrichten

Sobald der snmpd und snmptt eingerichtet sind und die Traps an den Zabbix-Server weiterleiten, können Sie für einen Host oder ein Template Items vom Typ „SNMP-Trap“ einrichten. Achten Sie darauf, dass für die Hosts, die SNMP-Traps senden, ein SNMP-Interface in Zabbix eingerichtet werden muss. Die Zuordnung der empfangenden Traps zu den Hosts erfolgt nicht über die IP-Adresse oder den DNS-Namen des Agent-Interface.

Zum Empfang von Traps brauchen Hosts ein SNMP-Interface.

Legen Sie nun für einen Host oder ein Template ein neues Item vom Typ „SNMP-Trap“ an. Als Key wählen Sie snmptrap[<regex>] aus. Sobald Zabbix einen Trap empfängt, wird der gesamte Inhalt des Traps mit dem angegebenen Regulären Ausdruck verglichen. Ist der Ausdruck im Trap enthalten, speichert Zabbix den gesamten Trap als Item-Value ab. Der Type of Information ist bei Items vom Typ SNMP-Trap immer Text. Traps können mitunter sehr lang sein. Beim Datentyp Character ist nicht sichergestellt, dass alle Informationen gespeichert werden, da dieser Typ nur maximal 255 Zeichen speichert.

SNMP-Trap Item. Darunter Ausgabe von SMPTTT in Datei zabbix_traps.tmp.

Für den Fall, dass Sie alle Traps speichern möchten, die ein Gerät sendet, gibt es noch den Item-Key snmptrap.fallback. Wenn Sie diesen Key für einen Host verwenden, speichert Zabbix alle Traps, die noch nicht von anderen Items „aufgefangen“ wurden, in diesem Item ab.

Mit der Trigger-Funktion diff(0)}#0 können Sie eine Aktion auslösen, sobald ein neuer unbekannter Trap empfangen wird. Beachten Sie, dass SNMP-Traps in der Regel statuslos sind. Das bedeutet, Geräte melden per SNMP-Trap nur, dass ein Fehler aufgetreten ist. Der Normalzustand wird hingegen nicht regelmäßig gemeldet. Meldet ein Gerät einen Fehler, die Rückkehr zum Normalzustand aber nicht, wird der Trigger in Zabbix dauerhaft ausgelöst bleiben. Eine mögliche Lösung ist, die Funktion nodata() in den Trigger zu integrieren. Der Trigger löst dann nur für eine gewisse Zeitspanne aus und kehrt nach Ablauf der Zeitpanne, wenn das Item keine neuen Daten mehr liefert, wieder in den Status OK zurück.

Ein Trigger löst für 5 Minuten aus, nachdem unbekannte Traps reinkommen.