Zabbix SNMP Traps empfangen und auswerten mit Template
Aus znilwiki
Warnung:
Dieser Artikel wird nicht mehr gepflegt - bitte schaut in die Anleitung zu Installation eines Zabbix-Servers - dort gibt es immer einen Abschnitt für SNMP-Traps:
Changelog:
- 29.11.2013 erste Version
- 15.07.2015 snmptt mit in die Voraussetzungen aufgenommen
- 16.07.2015 logrotate für die temporäre Zabbix Traps Datei aufgenommen
- 29.11.2016 Anpassung an Ubuntu 16.04.x LTS
Ich hatte gerade das Problem das ich einige Geräte mt überwachen wollte die sich leider nur per Email oder per SNMP-Traps bemerkbar machen können.
'SNMP-Traps' bedeutet das nur das Gerät von sich aus Meldungen lostreten / senden kann - wir können also nur Warten das etwas kommt.
Schwerpunkt liegt mir beim Thema 'Störung' - der Rest interessiert weniger.
Nun habe ich mir deshalb die Anleitung von Zabbix dazu durchgelesen: https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/snmptrap
Und dann noch einmal ... und ein drittes mal ... und hatte dann noch immer nicht ganz verstanden was/wie genau.
Zum Glück gibt es ja Thorsten Kramm und seine wirklich informative Anleitung dazu: http://lab4.org/wiki/Zabbix_Monitoring_SNMP_Traps_empfangen
Nun ja - ich hab es mit seiner Anleitung hinbekommen ... mir fehlte manchmal das ein oder andere zum Copy&Paste oder passende auf meine Installation.
Lieber Herr Kramm, ich verbeuge mich nun einmal ganz tief vor Ihrer Leistung - und hab doch meine eigene Version davon geschrieben.
Szenario
- Wir haben ein Gerät welches nur SNMP Traps versenden kann.
- Wir wollen das Zabbix die Traps empfängt und Alarm schlägt wenn etwas ist.
- Das ganze habe ich mit Ubuntu 12.04.3 LTS und Zabbix 2.2 gemacht
- Funktioniert auch mit Ubuntu 16.04.1 LTS und Zabbix 3.2 noch - mit kleinen Anpassungen
Vorbereitung Gerät
- Auf dem Gerät stellen wir ein das die SNMP Traps an den Zabbix Server gesendet werden sollen
- Und wir stellen ein das nur im Fehlerfall ein Trap gesendet werden soll
Beispiele - Zabbix Server hat die 172.16.16.19:
Vorbereitung Zabbix Server
Hinweis: ich nutze Ubuntu-Server (Befehle entsprechen Debian)
fehlende Pakete nachinstallieren
Wir Installieren ggf. die benötigten Pakete nach.
Bis Ubuntu 14.04:
apt-get install snmp snmpd snmptt snmp-mibs-downloader
Ab Ubuntu 16.04:
apt install snmp snmpd snmptt snmp-mibs-downloader snmptrapd
snmptrapd aktivieren und konfigurieren
Achtung: Die Vorgehensweise ist je nach Ubuntu-Version unterschiedlich!
Bis Ubuntu 14.04
Wir bearbeiten die Datei
nano /etc/default/snmpd
und ändern die Zeilen
SNMPDRUN=yes TRAPDRUN=no
in
SNMPDRUN=no TRAPDRUN=yes
die ganze Datei sieht bei mir nun so aus:
# This file controls the activity of snmpd and snmptrapd # Don't load any MIBs by default. # You might comment this lines once you have the MIBs downloaded. export MIBS= # snmpd control (yes means start daemon). SNMPDRUN=no # snmpd options (use syslog, close stdin/out/err). SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid' # snmptrapd control (yes means start daemon). As of net-snmp version # 5.0, master agentx support must be enabled in snmpd before snmptrapd # can be run. See snmpd.conf(5) for how to do this. TRAPDRUN=yes # snmptrapd options (use syslog). TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid' # create symlink on Debian legacy location to official RFC path SNMPDCOMPAT=yes
Damit wird der Dienst gestartet der die Meldungen entgegen nimmt statt des Dienstes der Abfragen beantwortet hätte.
Nun Konfigurieren wir den Dienst noch:
nano /etc/snmp/snmptrapd.conf
und fügen die folgenden Zeilen ans Ende:
traphandle default /usr/sbin/snmptt disableAuthorization yes
Ab Ubuntu 16.04
Wir bearbeiten die Datei
nano /etc/default/snmpd
und ändern die Zeile
SNMPDRUN=yes
in
SNMPDRUN=no
Dann die Datei
nano /etc/default/snmptrapd
und ändern die Zeile
TRAPDRUN=no
in
TRAPDRUN=yes
Nun Konfigurieren wir den Dienst noch:
nano /etc/snmp/snmptrapd.conf
und fügen die folgenden Zeilen ans Ende:
traphandle default /usr/sbin/snmptt disableAuthorization yes
snmptt konfigurieren
Zunächst die .ini Datei zum bearbeiten öffnen:
nano /etc/snmp/snmptt.ini
und die folgende Zeilen ändern (Denkt dran: STRG + W ruft die Suche auf):
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
Dann die .conf Datei - wir sichern zunächst die Original-Datei (auch wenn wir die wahrscheinlich nie wieder brauchen) durch umbenennen:
mv /etc/snmp/snmptt.conf /etc/snmp/snmptt.conf.orig
und erstellen eine neue, leere Datei:
nano /etc/snmp/snmptt.conf
mit folgendem Inhalt:
EVENT general .* "General event" Normal FORMAT ZBXTRAP $aA $ar severity:$s $Fn$+*
Das stammt alles nahezu 1:1 von http://lab4.org/wiki/Zabbix_Monitoring_SNMP_Traps_empfangen
Jetzt starten wir die Dienste neu:
Bis Ubuntu 14.04:
service snmpd restart && service snmptt restart
Ab Ubuntu 16.04:
systemctl restart snmpd.service && systemctl restart snmptrapd.service && systemctl restart snmptt.service
logrotate für /tmp/zabbix_traps.tmp einrichten
Unter Umständen läuft unser Zabbix-Server Jahre ohne Neustart. Ohne Neustart wird jedoch die Datei
/tmp/zabbix_traps.tmp
nicht gelöscht bzw. verkleinert. Gerade wenn viele Einträge in der Datei landen kann dadurch das Dateisystem volllaufen.
Deshalb nutzen wir logrotate um die Größe der Datei zu begrenzen.
Mit großer Wahrscheinlichkeit ist das Programm bereits installiert - ansonsten installiert Ihr es mit
apt-get install logrotate
nach.
Nun noch die Konfigurationsdatei für unsere /tmp/zabbix_traps.tmp
nano /etc/logrotate.d/zabbix_traps
und folgenden Inhalt einfügen:
/tmp/zabbix_traps.tmp { daily size 10M compress notifempty missingok maxage 365 rotate 1 }
Zabbix Server oder Proxy konfigurieren
Die Konfigurationsdatei zum bearbeiten öffnen:
nano /usr/local/etc/zabbix_server.conf oder nano /usr/local/etc/zabbix_proxy.conf
und folgende Zeilen suchen und ändern bzw. Kommentarzeichen davor entfernen:
SNMPTrapperFile=/tmp/zabbix_traps.tmp StartSNMPTrapper=1
Danach müssen wir den Zabbix Server oder Proxy Dienst neu starten!
Trapper-Datei anlegen
Neuere Zabbix Versionen meckern wenn es die Traps-Datei nicht gibt.
Die wird aber ggf. erst beim ersten eintreffenden Trap erstellt. Deshalb:
touch /tmp/zabbix_traps.tmp
und diesen Befehl nehmen wir auchg in die Crontab mit auf damit es die Datei immer gibt:
crontab -e @reboot touch /tmp/zabbix_traps.tmp
Zabbix Item konfigureren
Ihr legt einen neuen Host an - bei dem Ihr bitte zwingend den Eintrag für das SNMP-Interface ausfüllt - und zwar bitte auch die IP - diese wird in den Traps auftauchen und daran wird kann die Meldung dem Host zugeordnet werden:
Template mit Item und Trigger
Ich habe mir ein Template 'znil Template Wenn SNMP-Trap dann Fehler' gebaut - wenn das Gerät etwas sendet haben wir auch einen Fehler.
Zunächst das Item - ich nutze nur den snmptrap.fallback
- hier landet jede SNMP Meldung des Host die zu keinen anderem Item passt:
Und darauf den Trigger der den Alarm nach einer Stunde wieder selbst löscht (Ich bekomme ja vorher eine Mail):
Hier noch mal der Trigger als Text zum kopieren:
{znil Template Wenn SNMP-Trap dann Fehler:snmptrap.fallback.strlen()}>1&{znil Template Wenn SNMP-Trap dann Fehler:snmptrap.fallback.nodata(3600)}=0
Wie ihr seht teste ich die String-Länge - wenn da überhaupt etwas kommt haben wir einen Fehler.
Znil-Template-Wenn-SNMP-Trap-dann-Fehler.zip
--Bernhard Linz 14:26, 28. Nov. 2013 (CET)