Benutzerparameter
Übersicht
Mit einem UserParameter können Sie einen benutzerdefinierten Datenpunktschlüssel und den Befehl definieren, mit dem dessen Wert abgerufen wird, wenn kein integrierter Datenpunkt des Zabbix Agent die benötigten Daten bereitstellt. Ein UserParameter ist ein benutzerdefinierter Befehl, auf den über einen benutzerdefinierten Datenpunktschlüssel verwiesen wird und den der Zabbix Agent ausführt, wenn der entsprechende Datenpunkt geprüft wird.
Auf UNIX-Systemen führt der Agent UserParameter-Befehle 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 von ihm verwendeten Dateien, Sockets oder Anmeldedaten zuzugreifen.
Es gibt zwei Arten von UserParametern:
- Einfache UserParameter akzeptieren keine Argumente. Sie definieren einen festen Datenpunktschlüssel und einen auszuführenden Befehl.
- Flexible UserParameter akzeptieren Argumente (die als Parameter im Datenpunktschlüssel angegeben werden) und übergeben sie an den Befehl. Dadurch kann eine einzelne Definition für mehrere Datenpunkte verwendet werden.
Konfiguration von Benutzerparametern
Ein Benutzerparameter wird mit dem Konfigurationsparameter UserParameter definiert.
Ein Benutzerparameter hat die folgende Syntax:
UserParameter=<key>,<shell command>
Dabei gilt:
<key>– ein eindeutiger Datenpunktschlüssel, der den Benutzerparameter identifiziert.
Geben Sie beim Konfigurieren eines Datenpunkts diesen Schlüssel an, um auf den durch den Benutzerparameter definierten Befehl zu verweisen.
Bei einem einfachen Benutzerparameter ist der Schlüssel fest und akzeptiert keine Argumente. Bei einem flexiblen Benutzerparameter hängen Sie[*]an den Schlüssel an (zum Beispielmysql.status[*]), um anzugeben, dass er Argumente akzeptiert. Geben Sie diese Argumente beim Konfigurieren des Datenpunkts als Parameter im Datenpunktschlüssel an. Der Befehl kann mithilfe der Positionsreferenzen$1–$9auf die Parameter verweisen.<shell command>– ein Shell-Befehl oder ein Pfad zu einem benutzerdefinierten Skript, das der Agent ausführt, um den Datenpunktwert abzurufen.
Bei einem flexiblen Benutzerparameter kann der Befehl Positionsreferenzen$1–$9verwenden, um auf die entsprechenden Parameter im Datenpunktschlüssel zu verweisen (zum BeispielUserParameter=mysql.status[*],mysqladmin status --user=$1 --password=$2). Zabbix analysiert die in[]eingeschlossenen Parameter im Datenpunktschlüssel (d. h.mysql.status[zabbix,{$MYSQL.PASSWORD}]) und ersetzt die Positionsreferenzen im Befehl entsprechend.
$0wird durch den ursprünglichen Befehl ersetzt, bevor die Positionsreferenzen erweitert werden. Positionsreferenzen werden unabhängig davon interpretiert, ob sie in doppelten (") oder einfachen (') Anführungszeichen eingeschlossen sind. Um Positionsreferenzen ohne Ersetzung zu verwenden, geben Sie ein doppeltes Dollarzeichen an. Beispielsweise übergibtawk '{print $$2}'den Wert$2unverändert an den Befehl.
Beachten Sie, dass Positionsreferenzen mit dem Präfix$vom Zabbix Agent nur in flexiblen Benutzerparametern gesucht und ersetzt werden. Bei einfachen Benutzerparametern werden Positionsreferenzen nicht verarbeitet, daher ist das Escapen von$nicht erforderlich.
Bestimmte Zeichen können standardmäßig nicht als Argumente übergeben werden. Eine vollständige Liste der Zeichen finden Sie unter UnsafeUserParameters.
UserParameter muss auf jedem Zabbix Agent konfiguriert werden, der ihn verwendet:
- Direkt in der Agent-Konfigurationsdatei von Zabbix (
zabbix_agentd.confoderzabbix_agent2.conf). - In einer separaten
*.conf-Datei, sofern diese durch die Agent-Konfiguration eingebunden wird.
Pro Agent kann mehr als ein UserParameter definiert werden, da mehrere Dateien mit unterschiedlichen Parametersätzen eingebunden werden können.
Jeder Benutzerparameter muss innerhalb des überwachten Hosts über einen eindeutigen Datenpunktschlüssel verfügen.
Mit dem Konfigurationsparameter UserParameterDir können Sie das Arbeitsverzeichnis für die Ausführung von UserParameter-Befehlen angeben.
Wenn dieser Parameter konfiguriert ist, wechselt der Agent vor der Ausführung eines Befehls in das angegebene Arbeitsverzeichnis.
Befehle können mithilfe eines relativen Pfads mit dem Präfix ./ angegeben werden, zum Beispiel UserParameter=mykey,./myscript.sh.
So konfigurieren Sie einen Benutzerparameter:
- Schreiben Sie ein benutzerdefiniertes Skript oder einen Befehl, um die erforderlichen Daten abzurufen.
- Fügen Sie den Befehl und seinen eindeutigen Datenpunktschlüssel dem Konfigurationsparameter
UserParameterin der Agent-Konfigurationsdatei von Zabbix (zabbix_agentd.conf) hinzu. -
Laden Sie die Benutzerparameter aus der Konfigurationsdatei neu, indem Sie den Laufzeitsteuerungsbefehl ausführen:
zabbix_agentd -R userparameter_reload
Alternativ können Sie den Agent neu starten, damit die Konfigurationsänderungen übernommen werden.
- Erstellen Sie einen neuen Datenpunkt auf dem überwachten Host mit dem in
UserParameterdefinierten Datenpunktschlüssel.
Setzen Sie den Typ des Datenpunkts auf Zabbix Agent oder Zabbix Agent (aktiv).
Stellen Sie sicher, dass der Informationstyp des Datenpunkts korrekt konfiguriert ist. Andernfalls weist Zabbix den zurückgegebenen Wert zurück.
Ein Beispiel für die Konfiguration und Verwendung von Benutzerparametern finden Sie unter Erweitern von Zabbix Agents.
Benutzerparameter unterliegen dem Timeout für Prüfungen durch den Zabbix Agent. Wenn das Timeout erreicht wird, wird der Prozess beendet, der den Benutzerparameter ausführt. Weitere Informationen finden Sie unter Befehlsausführung.
Beachten Sie, dass lang laufende Skripte Systemressourcen verbrauchen und andere Prüfungen verzögern können.
Befehlsergebnis
Der Rückgabewert des Befehls besteht aus der vom Befehl erzeugten Standardausgabe und der Standardfehlerausgabe.
Benutzerparameter, die Text zurückgeben (den Informationstyp Character, Log oder Text), können auch Leerraum zurückgeben. Wenn der Befehl ein ungültiges Ergebnis erzeugt, wird der Datenpunkt nicht unterstützt. Ein Datenpunkt mit einem dieser Informationstypen wird jedoch nicht allein deshalb nicht unterstützt, weil der Befehl eine Ausgabe auf der Standardfehlerausgabe erzeugt.
Der Rückgabewert des Befehls ist auf 16 MB begrenzt, einschließlich nachfolgendem Leerraum, der abgeschnitten wird. Diese Begrenzung gilt vor den Schritten zur Vorverarbeitung von Datenpunktwerten. Auch Datenbanklimits gelten.
Beispiele für UserParameter
Dieser Abschnitt enthält Beispiele für einfache und flexible UserParameter.
Die folgenden Beispiele dienen ausschließlich 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.
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 Numeric nicht unterstützt würde (siehe Command result).
Dieses Beispiel setzt voraus, dass die MySQL-Anmeldeinformationen 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.
Beispiele für flexible User-Parameter
Beispiel 1: Rückgabe eines Parameters
UserParameter=ping[*],echo $1
Mit diesem User-Parameter können Sie mehrere Datenpunkte definieren, deren Schlüssel das Format ping[parameter] haben:
ping[0]- gibt0zurück.ping[hello]- gibthellozurü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 für dieses Konto zugänglichen MySQL-Optionsdatei.
Beispiel 3: Zählen von Zeilen, 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.