Aktionen

Zabbix SNMP Traps empfangen und auswerten mit Template

Aus znilwiki

Warning.png

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:

Zabbix#Installation_.2B_Update


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:

ZABBIX-SNMP-Traps-001.png


ZABBIX-SNMP-Traps-002.png




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:

ZABBIX-SNMP-Traps-003.png




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:

ZABBIX-SNMP-Traps-004.png


Und darauf den Trigger der den Alarm nach einer Stunde wieder selbst löscht (Ich bekomme ja vorher eine Mail):

ZABBIX-SNMP-Traps-005.png
Warning.png
Warnung: Im Bild ist ein Fehler - am Ende muss es =0 oder #1 heissen - in der zeile zum Kopieren unten steht es nun richtig drin!


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.

Important.png
Hinweis: In neueren Zabbix Version könnt Ihr / müsst Ihr das Wort "and" statt dem "&" verwenden



Znil-Template-Wenn-SNMP-Trap-dann-Fehler.zip


--Bernhard Linz 14:26, 28. Nov. 2013 (CET)


Loading comments...