Zabbix Agent erweitern

Den Zabbix-Agenten mit eigenen Datenquellen verbinden

Ein Monitoring-System stieße schnell an seine Grenzen, wenn man es nicht mit eigenen Checks erweitern könnte. Viele firmenspezifische Anforderungen an das Monitoring können mit den Bordmitteln von Zabbix nicht erfüllt werden. Das wäre auch zu viel verlangt, wenn für alle Softwareprodukte und alle Anforderungen fertige Checks in Zabbix integriert würden.

Zabbix bietet mehrere Möglichkeiten, eigene Checks ins Monitoring zu integrieren. Eine dieser Möglichkeiten ist die Erweiterung des Zabbix-Agenten mit sogenannten User-Parametern.

Der Zabbix-Agent ruft dabei ein beliebiges Programm auf und gibt die Ausgabe des Programms an den Zabbix-Server weiter. Dort steht diese Ausgabe dann als Item-Value zur Weiterverarbeitung zum Beispiel durch Trigger wie gewohnt zur Verfügung.

User-Parameter einrichten

In der Konfigurationsdatei des Agenten – in der Regel zabbix_agentd.conf – geben Sie mit der Option User-Parameter an, welche Programme der Agent aufruft und über welchen Item-Key Sie dieses Programm ansprechen.

Tragen Sie in der Konfigurationsdatei zum Beispiel Folgendes ein:

UserParameter=test.echo,echo hallo

Hinter der Option UserParameter legen Sie als Erstes einen Item-Key fest. Diesen können Sie frei bestimmen. Im Item-Key dürfen Punkte und Unterstriche vorkommen, aber kein Sonder- und Leerzeichen.

Dem Item-Key folgt mit Komma getrennt der Befehl, welcher ausgeführt werden soll. Dieses Kommando wird in dem Intervall ausgeführt, welches Sie bei der Einrichtung des Items im Zabbix-Server angeben.

Sie können dem externen Programm auch über den Zabbix-Server Optionen übergeben. Dazu folgende Beispiele:

UserParameter=win.test[*],c:\testitem.bat $1 $2
UserParameter=linux.test[*],/usr/local/bin/testitem.sh $1 $2

Durch die Zeichenkette [*] geben Sie an, dass der Agent die vom Server gesendeten Optionen an das Programm durchleiten soll.

Den Item-Key zum oben genannten Beispiel könnten Sie zum Beispiel so eingeben:

win.test[first,second]
linux.test[first,second]
Datei:User-Parameter1.png
Anlegen eines benutzerdefinierten Items

Nun wird das Skript c:\testitem.bat alle 30 Sekunden durch den Zabbix-Agenten aufgerufen. Die im Item-Key in Klammern angegebenen Optionen werden an das Skript übergeben. Bei Batch-Skripten unter Windows stehen diese dann in den Variablen %1, %2 usw. zur Verfügung.
Bei Bash-Skripten unter Linux stehen die Variablen in $1, $2 usw.

Datei:User-Parameter result.png
Das benutzerdefinierte Item konnte abgerufen werden.

Regeln und Hinweise für User-Parameter

  • Das externe Programm muss immer etwas zurückliefern. Liefert das Programm nichts zurück, nimmt das Item den Status unsupported an. Die Exit-Codes werden nicht berücksichtigt und können nicht ausgewertet werden.
  • Dezimalzahlen müssen einen Punkt als Dezimalzeichen verwenden. Enthält eine Zahl ein Komma, kann diese vom Zabbix-Server nicht als Zahl ausgewertet werden.
  • Das Programm muss sich in der Zeit beenden, die über die Option Timeout im Zabbix-Agenten festgesetzt wird. Erhöhen Sie ggf. diesen Timeout. Das Maximum sind 30 Sekunden. Wird das Zeitlimit überschritten, versucht der Zabbix-Agent das Programm zu beenden. Achten Sie auch auf die Timeouts im Zabbix-Server und/oder den Zabbix-Proxys. Dort ist noch ein genereller Timeout für die Antwortzeiten des Zabbix-Agenten festgelegt. Nach Ablauf dieser Zeitspanne wartet der Zabbix-Server oder Proxy nicht weiter auf eine Antwort des Agenten. Das Item erhält dann ebenfalls den Wert unsupported.
  • Das Programm muss sich im Standardpfad befinden oder muss mit einem kompletten Pfad angegeben werden.
  • Unter Linux werden die externen Programme vom Benutzer zabbix ausgeführt, der nur eingeschränkte Rechte hat. Oft werden die Programmaufrufe der User-Parameter nur als User root getestet. Wenn dann keine Daten im Zabbix-Server ankommen, liegt es häufig an fehlenden Berechtigungen. Abhilfe schafft der Einsatz von Sudo-Regeln.
  • Es werden die „reguläre“ (STDOUT) und die Fehlerausgabe (STDERR) an den Zabbix-Agenten übergeben. Fehlermeldungen, die normalerweise über STDERR ausgegeben werden, werden übermittelt. Das kann unter Umständen dazu führen, dass sich der Datentyp des Items ändert und nicht mehr zum Datentyp passt, den der Zabbix-Server erwartet. Erweitern Sie den User-Parameter ggf. mit 2>/dev/null, damit Fehlermeldungen nicht an den Zabbix-Server übermittelt werden.
  • SELinux und Appamor können den Zabbix-Agenten daran hindern, Dateien zu lesen.
  • Die Ausgabe des externen Programms darf maximal 512KB betragen.

Berechtigungen

Oft muss der Zabbix-Agent Programme mit Root-Rechten aufrufen. Viele Programme, die zum Beispiel den Status einer Hardware überwachen, greifen auf Ressourcen zu, an die nur der Root-User dran darf.

Damit auch der Zabbix-Agent solche Programme ausführen darf, können Sie „sudo“ verwenden. Tragen Sie die entsprechenden Programme in die Datei /etc/sudoers ein. Verwenden Sie dazu das Programm visudo, zum Beispiel:

zabbix  ALL=(ALL) NOPASSWD:/usr/bin/mpt-status

Wenn der User-Parameter trotz der passenden Sudo-Regel nicht funktioniert, prüfen Sie das Logfile des Zabbix-Agenten. Wenn Sie folgenden Eintrag finden:

sudo: sorry, you must have a tty to run sudo

müssen Sie die Regel

Defaults    requiretty

aus der Datei /etc/sudoers entfernen. Diese Einstellung ist bei RHEL und CentOS standardmäßig aktiviert.

Wenn es klemmt

Checkliste

Sie haben einen User-Parameter eingerichtet, doch es kommen keine Daten im Zabbix-Server an. Gehen Sie folgende Checkliste durch:

  • Haben Sie den Zabbix-Agenten nach Änderungen an der Konfiguration neu gestartet?
  • Loggen Sie sich als User zabbix ein. Verwenden Sie su - zabbix -s /bin/bash, denn Zabbix hat in der Regel keinen Shell-Zugang (gilt nur für Linux).
  • Sind die Pfadangaben zu Programmen oder Skripten korrekt? Wenn der Zabbix-Server die Daten abruft, sind die verwendeten Programme ggf. nicht im Standardpfad enthalten. Testen Sie mit zabbix_get (siehe unten).
  • Führen Sie das Skript aus, welches die Daten an Zabbix liefern soll. Was kommt raus?
  • Liefert das Skript die Daten schnell genug? Timeout im Zabbix-Agenten und im Zabbix-Server prüfen.
  • Liefert das Skript in jedem Fall Daten zurück?
  • Ist im Zabbix-Server der richtige Datentyp für das Item eingestellt? Wählen Sie zum Testen notfalls den Datentyp „Text“, der jedes Rückgabeformat akzeptiert.
  • Setzen Sie das Loglevel des Agenten auf 3. Schauen Sie in das Logfile des Agenten. Erhöhen Sie das Loglevel ggf. auf 4.
  • Testen Sie den User-Parameter mit dem Zabbix-Agenten manuell. Siehe unten.
  • Sind in den vom Zabbix-Server übergebenen Parametern unerlaubte Zeichen enthalten? Schalten Sie testweise die Option „UnsafeUserParameters=1“ ein.

Items über den Agent testen

Über den Zabbix-Agenten können Sie beliebige Items, also auch User-Parameter, auf der Konsole testen. Loggen Sie sich auf dem System ein, auf dem Sie ein Item testen möchten. Unter Linux wechseln Sie zum Benutzer zabbix.

Unter Windows führt der zabbix_agentd.exe die Tests aus. Zum Beispiel:

zabbix_agentd.exe -c C:\program files\zabbix\zabbix_agentd.conf -t win.test[first,second]

Unter Linux testen Sie Items mit dem zabbix_agentd. Unter Umständen ist es notwendig, dass Sie die Konfigurationsdatei von zabbix_agentd explizit angeben.

su - zabbix -s /bin/bash
zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t test.item[first,second]

Da bei diesen manuellen Test auch die Fehlermeldungen von STDERR ausgegeben werden, kommen Sie so oft Fehlern auf die Schliche.

Item per zabbix_get testen

Auf dem Zabbix-Server oder -Proxy können Sie mit dem Programm zabbix_get den Wert für ein Item sofort abrufen. Sie brauchen also nicht warten, bis der Zabbix-Server im vorgesehenen Intervall das Item abruft. Beispiel:

zabbix_get -s 192.4.1.1 -k "vfs.fs.size[/,pfree]"

Der Server 192.4.1.1 wird nach dem Item vfs.fs.size[/,pfree] gefragt.

Beispiel: Fehlgeschlagene Login-Versuche überwachen

Linux-Systeme protokollieren jeden fehlgeschlagenen Anmeldeversuch in der Regel in der Datei /var/log/auth.log bzw. /var/log/audit/audit.log. Der Zabbix-Agent kann mit Hilfe des externen Programms logtail die fehlgeschlagenen Logins innerhalb einer bestimmten Zeitspanne messen.

Logtail merkt sich bei anwachsenden Logfiles bei jedem Aufruf, bis zu welcher Zeile die Datei ausgegeben wurde. Beim nächsten Aufruf werden nur die neuen Zeilen ausgegeben, die seit dem letzten Aufruf hinzugekommen sind.

Nutzer von Debian und Ubuntu installieren logtail per apt-get.

apt-get install logtail

Nutzer von Red-Hat und CentOS müssen das Paket logcheck aus dem EPEL Repository installieren.

yum install logcheck 

Fügen Sie die folgenden Zeilen in die Datei /etc/zabbix/zabbix_agent.conf ein. Je nach Zabbix-Version und -Distribution können Sie den User-Parameter auch in eine gesonderte Datei einfügen, die Sie dann im Ordner zabbix_agentd.d speichern. Starten Sie nach der Änderung den Zabbix-Agenten neu.

# Debian, Ubuntu
UserParameter=logins.failed,logtail 
-o /tmp/.auth.log.tail 
-f /var/log/auth.log|grep -c "Failed password"

# Red Hat,CentOS
UserParameter=logins.failed,logtail 
-o /tmp/.audit.log.tail 
-f /var/log/audit/audit.log |grep -c "USER_AUTH.*res=failed"
Die Angabe eines User-Parameters muss in einer Zeile ohne Umbrüche erfolgen. Der Umbruch wurde nur der besseren Lesebarkeit halber eingefügt und darf nicht übernommen werden.

Damit der Benutzer zabbix die Datei lesen darf, fügen Sie diesen der Gruppe „adm“ hinzu.

adduser zabbix adm       # Debian, Ubuntu
usermod -a -G adm zabbix # Red Hat, CentOS

Auf Red-Hat- und CentOS-Systemen müssen Sie noch dafür sorgen, dass die Gruppe „adm“ die Datei /var/log/audit/audit.log lesen darf. Tragen Sie anstatt der Gruppe „root“ die Gruppe „adm“ als „log_group“ in die Datei /etc/audit/auditd.conf ein und starten Sie den auditd neu. Geben Sie der Gruppe „adm“ Leserechte auf das Verzeichnis:

chgrp adm /var/log/audit/
chmod g+r /var/log/audit/

Starten Sie den Zabbix-Agenten nun neu und verwenden Sie das Item logins.failed.

Die Einstellungen von SELinux oder Appamor können das Auswerten von Logfiles für den Benutzer zabbix u.U. verhindern. Passen Sie die Regeln an oder schalten Sie SELinux oder Appamor testweise aus.

Testen Sie anschließend, ob der Zabbix-Agent fehlgeschlagene Logins ermitteln kann.

Der Zabbix-Agent registriert durch Logfile-Analyse fehlgeschlagene Login-Versuche.