Zabbix erweitern mit External Checks

Den Zabbix-Server mit eigenen Datenquellen erweitern

Die sogenannten "externen Checks" sind eine Möglichkeit, Tests durch externe Programme auf dem Zabbix-Server ausführen zu lassen. Wenn die vorhandenen Checks in der Liste der "simple Checks" nicht ausreichen, können beliebige Programme auf dem Zabbix-Server zum Testen verwendet werden.

Externe Skripte werden auf dem Zabbix-Server ohne den Zabbix-Agenten ausgeführt. Der Rückgabewert des Skriptes wird dann als Item-Value für den entsprechenden Host gespeichert und kann wie jedes andere Item zum Beispiel durch Trigger ausgewertet werden.

Den Skripten können eine Reihe von Parametern übergeben werden, zum Beispiel die für den Host eingestellte IP-Adresse oder der Hostname.

Externe Skripte aktivieren

In der Standardkonfiguration ist die Verwendung von externen Skripten nicht aktiviert. Aktivieren Sie externe Skripte, indem Sie in der Konfigurationsdatei des Zabbix-Servers einen Ordner angeben, in welchem die externen Skripte gespeichert werden. Nach dieser Änderung müssen Sie den Zabbix-Server neu starten.

### Option: ExternalScripts
#       Location of external scripts
#
# Mandatory: no
# Default:
ExternalScripts=/usr/lib/zabbix/externalscripts

Ein Skript als Item verwenden

Der erste Test

Legen Sie im oben konfigurierten Verzeichnis /usr/lib/zabbix/externalscripts ein Shell-Skript test.sh an:

#!/bin/bash
echo $@>>/tmp/external_script.log
echo 1

Machen Sie das Skript mit dem Kommando chmod a+x test.sh ausführbar.

Die Skripte müssen immer etwas zurückliefern, sonst erzeugt der Zabbix-Server eine Fehlermeldung und verwendet das Skript nicht.

Item anlegen

  • Richten Sie nun für einen Host oder ein Template ein neues Item ein.
  • Wählen Sie als Type "External Check" aus.
  • Als Key geben Sie den Namen des Skriptes an, so wie die Datei im Skripteordner heißt. Als ersten Item-Parameter sollten Sie das Makro {HOST.CONN} angeben, damit die Verbindungsdaten des Hosts als erster Parameter an das Skript übergeben werden. Alle weiteren Parameter trennen Sie wie üblich mit einem Komma.
  • Und wie bei jedem Item muss der "Type of information" zum Rückgabewert des Skriptes passen (ganze Zahl, Dezimalzahl, Text usw.).
Einrichten eines Items, welches ein benutzerdefiniertes Skript auf dem Zabbix-Server ausführt

Nachdem das Item einmal „ausgeführt“ wurde, schauen Sie in der Datei /tmp/external_script.log nach, wie der Zabbix-Server dem Skript die Parameter übergeben hat.

Wenn Sie als Key zum Beispiel test.sh[{HOST.CONN},hallo,"Zabbix ist toll"] angeben, dann steht der String 'hallo' in der Variable $2 und "Zabbix ist toll" in Variable $3 im Skript zur Verfügung. Verwenden Sie Anführungszeichen, um Parameter mit Leerzeichen zu übergeben.

Hinweise und Rahmenbedingungen für externe Skripte

Sie können einem Skript Parameter wie die Verbindungsdaten (IP-Adresse oder der Hostname) des überwachten Hosts übergeben. Dies machen Sie über das Makro {HOST.CONN} im Item-Key.

Die Skripte werden vom User zabbix ausgeführt. Achten Sie also auf die Berechtigungen und verwenden Sie ggf. „sudo“, falls Sie Root-Rechte für ein Skript brauchen.

Der Zabbix-Server oder -Proxy ruft die externen Skripte über eine Shell (in der Regel /bin/sh) auf. Dies kann zu unerwarteten Effekten führen, wenn Sie einem externen Skript Optionen über ein Zabbix-Makro mitgeben. Wenn das Makro undefiniert ist, versucht die Shell, die Variable zu interpretieren. Wenn Sie zum Beispiel über den Item-Key http.status[{$PATH}] ein Skript aufrufen, und Zabbix kann das Makro nicht ersetzen, dann wird $PATH von der Shell ersetzt. Zabbix würde dann http.status[{/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin}] aufrufen.

Prüfen Sie, ob die Skripte ausführbar sind, indem Sie sich als Benutzer zabbix anmelden.

Prüfen Sie auch, wie lange ein Skript braucht, um einen Wert zurückzugeben. Der Zabbix-Server gibt mit den Standardeinstellungen den externen Skripten nur 3 Sekunden Zeit. Brauchen einige Skripte länger, müssen Sie den Timeout der externen Skripte in der Konfigurationsdatei des Zabbix-Servers erhöhen.

### Option: Timeout
#       Specifies how long we wait for agent, SNMP device or external check (in seconds).
#
# Mandatory: no
# Range: 1-30
# Default: 3
Timeout=10
Achten Sie auf die Performance von externen Skripten und Programmen. Diese sollten eine sehr geringe Laufzeit haben und nicht zu viele Ressourcen in Anspruch nehmen. Ebenfalls sollten die Programme mehrfach parallel laufen können. Wenn Sie ein externes Skript in einem Template verwenden, dann wird dieses unter Umständen für Hunderte von Hosts parallel ausgeführt. Externe Skripte können ggf. die Leistung des Zabbix-Servers erheblich beeinträchtigen.

Beispiel: Ablauf von SSL-Zertifikaten prüfen

Legen Sie das Perl-Skript sslcert.expiry.pl in den Ordner für externe Skripte und machen Sie es per chmod +x ausführbar.

Unter Umständen müssen Sie noch ein paar Perl-Module installieren.

apt-get install libnet-ssleay-perl libtimedate-perl #Ubuntu, Debian
yum install perl-Net-SSLeay                         #CentOS, Red Hat

Ein erster Test auf der Kommandozeile sollte ungefähr Folgendes ausgeben:

# ./sslcert.expiry.pl ssl.lin4.de
263

Legen Sie nun ein Item für einen Host an, für den Sie die Gültigkeit eines SSL-Zertifikats prüfen wollen. Ein Trigger kann Sie nun warnen, wenn die Verlängerung eines SSL-Zertifikats ansteht.

Zabbix prüft, wie lange ein SSL-Zertifikat noch gültig ist.