5 Benutzerparameter

Übersicht

Manchmal möchten Sie eine Agent-Prüfung ausführen, die in Zabbix nicht vordefiniert ist. Hier kommen Benutzerparameter zum Einsatz.

Sie können einen Befehl schreiben, der die benötigten Daten abruft, und ihn als Benutzerparameter in der Agent-Konfigurationsdatei (Konfigurationsparameter UserParameter) angeben.

Ein Benutzerparameter hat die folgende Syntax:

UserParameter=<key>,<command>

Wie Sie sehen, enthält ein Benutzerparameter ebenfalls einen Schlüssel. Der Schlüssel wird beim Konfigurieren eines Datenpunkts benötigt. Geben Sie einen Schlüssel Ihrer Wahl ein, auf den Sie leicht verweisen können (er muss innerhalb eines Hosts eindeutig sein).

Starten Sie den Agent neu oder verwenden Sie die Option Laufzeitsteuerung des Agents, damit der neue Parameter übernommen wird, z. B.:

zabbix_agentd -R userparameter_reload

Geben Sie anschließend beim Konfigurieren eines Datenpunkts den Schlüssel ein, um auf den Befehl des auszuführenden Benutzerparameters zu verweisen.

Benutzerparameter sind Befehle, die vom Zabbix Agent ausgeführt werden. Beachten Sie, dass bis zu 16 MB Daten zurückgegeben werden können, bevor die Schritte zur Vorverarbeitung des Datenpunktwerts ausgeführt werden.

Auf UNIX-Systemen führt der Agent Benutzerparameterbefehle mit /bin/sh unter dem Betriebssystemkonto aus, unter dem der Agent läuft (normalerweise zabbix). Dieses Konto muss über ausreichende Berechtigungen verfügen, um den Befehl auszuführen und auf alle verwendeten Dateien, Sockets oder Anmeldedaten zuzugreifen.

Benutzerparameter unterliegen dem Timeout für Agent-Prüfungen. Wenn das Timeout erreicht wird, wird der erzeugte Prozess des Benutzerparameters beendet.

Siehe auch:

Beispiele für einfache UserParameter

Beispiel 1: Konstanter Wert

UserParameter=ping,echo 1

Ein Datenpunkt mit dem Schlüssel ping gibt immer 1 zurück.

Beispiel 2: Verfügbarkeit des MySQL-Servers

UserParameter=mysql.ping,mysqladmin ping 2>/dev/null | grep -c alive

Gibt 1 zurück, wenn der MySQL-Server antwortet, und andernfalls 0. Die Umleitung 2>/dev/null verwirft die Standardfehlerausgabe von mysqladmin. Ohne diese Umleitung könnte zusammen mit 0 eine Fehlermeldung zurückgegeben werden, wodurch ein Datenpunkt mit dem Informationstyp Numerisch nicht unterstützt werden könnte (siehe Befehlsergebnis).
Dieses Beispiel setzt voraus, dass die Anmeldeinformationen für die MySQL-Verbindung für das Betriebssystemkonto konfiguriert sind, unter dem der Zabbix Agent ausgeführt wird, beispielsweise in einer für dieses Konto zugänglichen MySQL-Optionsdatei.

Flexible Benutzerparameter

Flexible Benutzerparameter akzeptieren Parameter mit dem Schlüssel. Auf diese Weise kann ein flexibler Benutzerparameter als Grundlage für die Erstellung mehrerer Datenpunkte dienen.

Flexible Benutzerparameter haben die folgende Syntax:

UserParameter=key[*],command
Parameter Beschreibung
Key Eindeutiger Datenpunktschlüssel. [*] definiert, dass dieser Schlüssel Parameter innerhalb der Klammern akzeptiert.
Parameter werden bei der Konfiguration des Datenpunkts angegeben.
Command Auszuführender Befehl zur Auswertung des Schlüsselwerts.
Nur für flexible Benutzerparameter:
Sie können Positionsreferenzen $1…$9 im Befehl verwenden, um auf den jeweiligen Parameter im Datenpunktschlüssel zu verweisen.
Zabbix analysiert die in [ ] des Datenpunktschlüssels eingeschlossenen Parameter und ersetzt $1,...,$9 im Befehl entsprechend.
$0 wird durch den ursprünglichen Befehl (vor der Erweiterung von $0,...,$9) ersetzt, der ausgeführt werden soll.
Positionsreferenzen werden unabhängig davon interpretiert, ob sie in doppelte (") oder einfache (') Anführungszeichen eingeschlossen sind.
Um Positionsreferenzen unverändert zu verwenden, geben Sie ein doppeltes Dollarzeichen an – zum Beispiel awk '{print $$2}'. In diesem Fall wird $$2 bei der Ausführung des Befehls tatsächlich zu $2.

Positionsreferenzen mit dem Zeichen $ werden vom Zabbix Agent nur für flexible Benutzerparameter gesucht und ersetzt. Bei einfachen Benutzerparametern wird eine solche Verarbeitung übersprungen; daher ist keine Maskierung von $-Zeichen erforderlich.

Bestimmte Zeichen sind in Benutzerparametern standardmäßig nicht zulässig. Eine vollständige Liste der Zeichen finden Sie unter UnsafeUserParameters.

Beispiele für flexible UserParameter

Die folgenden Beispiele dienen nur zu Demonstrationszwecken und sollten ohne geeignete Sicherheitsvorkehrungen nicht in Produktionsumgebungen verwendet werden. Flexible UserParameter, die mit [*] definiert wurden, akzeptieren Argumente, die Risiken durch Command Injection verursachen können, wenn sie nicht sicher verarbeitet werden.

Beispiel 1: Zurückgeben eines Parameters

UserParameter=ping[*],echo $1

Sie können mithilfe dieses UserParameters mehrere Datenpunkte mit Schlüsseln im Format ping[parameter] definieren:

  • ping[0] - gibt 0 zurück.
  • ping[hello] - gibt hello zurück.

Beispiel 2: MySQL-Verfügbarkeit auf einem angegebenen Host

Mit diesem Parameter kann die Verfügbarkeit eines MySQL-Servers auf einem angegebenen Host überwacht werden.

UserParameter=mysql.ping[*],mysqladmin -h "$1" ping 2>/dev/null | grep -c alive

Der Datenpunkt mit dem Schlüssel mysql.ping[db1.example.com] gibt 1 zurück, wenn der MySQL-Server auf diesem Host antwortet, und andernfalls 0.
In diesem Beispiel wird vorausgesetzt, dass die Anmeldeinformationen für die MySQL-Verbindung für das Betriebssystemkonto konfiguriert sind, unter dem der Zabbix Agent ausgeführt wird, beispielsweise in einer MySQL-Optionsdatei, auf die dieses Konto zugreifen kann.

Beispiel 3: Zeilen zählen, die einem Muster entsprechen

Dieser Parameter kann verwendet werden, um die Anzahl der Zeilen in einer Datei zu zählen.

UserParameter=grep.count[*],grep -c "$2" "$1"

Gibt die Anzahl der Zeilen in der durch das erste Argument angegebenen Datei zurück, die dem durch das zweite Argument angegebenen regulären Ausdruck entsprechen. Beispielsweise gibt grep.count[/etc/passwd,root] die Anzahl der Zeilen in /etc/passwd zurück, die dem regulären Ausdruck root entsprechen.

Befehlsausgabe

Der Rückgabewert des Befehls ist die Standardausgabe zusammen mit der vom Befehl erzeugten Standardfehlerausgabe.

Ein Datenpunkt, der Text zurückgibt (Zeichen-, Protokoll- oder Texttyp von Informationen), wird bei einer Standardfehlerausgabe nicht auf den Status „nicht unterstützt“ gesetzt.

Der Rückgabewert ist auf 16 MB begrenzt (einschließlich nachfolgender Leerzeichen, die abgeschnitten werden); Datenbanklimits gelten ebenfalls.

Benutzerparameter, die Text zurückgeben (Zeichen-, Protokoll- oder Texttyp von Informationen), können auch ein Leerzeichen zurückgeben. Im Falle eines ungültigen Ergebnisses wird der Datenpunkt nicht unterstützt.