[comment]: # ({70a6015a-70a6015a})
# 5 Benutzerparameter

[comment]: # ({/70a6015a-70a6015a})

[comment]: # ({a2e89be7-9a4b2756})
#### Übersicht

Manchmal möchten Sie möglicherweise eine Agent-Prüfung ausführen, die nicht
bereits vordefiniert mit Zabbix geliefert wird. Hier kommen Benutzerparameter ins Spiel.

Sie können einen Befehl schreiben, der die benötigten Daten abruft, und ihn
im Benutzerparameter in der [Agent-Konfigurationsdatei](/manual/appendix/config/zabbix_agentd) (Konfigurationsparameter 'UserParameter')
einfügen.

Ein Benutzerparameter hat die folgende Syntax:

    UserParameter=<key>,<command>

Wie Sie sehen, enthält ein Benutzerparameter auch einen Schlüssel. Der Schlüssel wird
bei der Konfiguration eines Datenpunkts benötigt. Geben Sie einen Schlüssel Ihrer Wahl ein, auf den
leicht verwiesen werden kann (er muss innerhalb eines Hosts eindeutig sein).

Starten Sie den Agent neu oder verwenden Sie die Option zur [Laufzeitsteuerung des
Agent](/manual/concepts/agent#runtime-control), damit der neue Parameter übernommen wird, z. B.:

    zabbix_agentd -R userparameter_reload

Geben Sie dann beim [Konfigurieren eines Datenpunkts](/manual/config/items/item) den Schlüssel ein, um auf den
Befehl aus dem Benutzerparameter zu verweisen, den Sie ausführen möchten.

Benutzerparameter sind Befehle, die vom Zabbix Agent ausgeführt werden.
Beachten Sie, dass vor den Schritten der [Vorverarbeitung von Datenpunktwerten](/manual/config/items/preprocessing) bis zu 16 MB Daten zurückgegeben werden können.

Unter UNIX-Betriebssystemen wird **/bin/sh** als Befehlszeileninterpreter verwendet.
Benutzerparameter unterliegen dem Timeout der Agent-Prüfung; wenn das Timeout erreicht wird, wird der durch den Benutzerparameter gestartete Prozess beendet.

Siehe auch:

-   [Schritt-für-Schritt-Anleitung](/manual/config/items/userparameters/extending_agent) zur
    Verwendung von Benutzerparametern
-   [Befehlsausführung](/manual/appendix/command_execution)

[comment]: # ({/a2e89be7-9a4b2756})

[comment]: # ({53dfad45-53dfad45})
##### Beispiele für einfache Benutzerparameter

Ein einfacher Befehl:

    UserParameter=ping,echo 1

Der Agent wird immer eine "1" für ein Element mit dem Schlüssel "ping" zurückgeben.

Ein komplexeres Beispiel:

    UserParameter=mysql.ping,mysqladmin -uroot ping | grep -c alive

Der Agent gibt '1' zurück, wenn der MySQL-Server aktiv ist, andernfalls '0'.

[comment]: # ({/53dfad45-53dfad45})

[comment]: # ({64b08883-e619711f})
#### Flexible Benutzerparameter

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

Flexible Benutzerparameter haben die folgende Syntax:

    UserParameter=key[*],command

|Parameter|Beschreibung|
|--|--------|
|**Key**|Eindeutiger Datenpunktschlüssel. Das \[\*\] definiert, dass dieser Schlüssel Parameter innerhalb der Klammern akzeptiert.<br>Die Parameter werden bei der Konfiguration des Datenpunkts angegeben.|
|**Command**|Befehl, der zur Ermittlung des Werts des Schlüssels ausgeführt wird.<br>*Nur für flexible Benutzerparameter*:<br>Sie können Positionsreferenzen $1…$9 im Befehl verwenden, um auf den jeweiligen Parameter im Datenpunktschlüssel zu verweisen.<br>Zabbix analysiert die in \[ \] des Datenpunktschlüssels eingeschlossenen Parameter und ersetzt $1,...,$9 im Befehl entsprechend.<br>$0 wird durch den ursprünglichen Befehl ersetzt (vor der Erweiterung von $0,...,$9), der ausgeführt werden soll.<br>Positionsreferenzen werden unabhängig davon interpretiert, ob sie in doppelte (") oder einfache (') Anführungszeichen eingeschlossen sind.<br>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`.|

::: noteimportant
Positionsreferenzen mit dem Zeichen $ werden nur bei flexiblen Benutzerparametern vom Zabbix Agent gesucht und ersetzt. Bei einfachen Benutzerparametern wird diese Referenzverarbeitung übersprungen, daher ist kein Escaping von $ erforderlich.
:::

::: noteimportant
Bestimmte Zeichen sind in Benutzerparametern standardmäßig nicht erlaubt.
Die vollständige Liste der Zeichen finden Sie unter [UnsafeUserParameters](/manual/appendix/config/zabbix_agentd#unsafeuserparameters).
:::

[comment]: # ({/64b08883-e619711f})

[comment]: # ({5c6e8e3c-5c6e8e3c})
##### Beispiel 1

Etwas sehr Einfaches:

    UserParameter=ping[*],echo $1

Wir können eine unbegrenzte Anzahl von Elementen für die Überwachung definieren, die alle das folgende Format haben
ping\[something\].

-   ping\[0\] - wird immer '0' zurückgeben
-   ping\[aaa\] - wird immer 'aaa' zurückgeben

[comment]: # ({/5c6e8e3c-5c6e8e3c})

[comment]: # ({db2a6e16-db2a6e16})
##### Beispiel 2

Lassen Sie uns mehr Sinn hinzufügen!

    UserParameter=mysql.ping[*],mysqladmin -u$1 -p$2 ping | grep -c alive

Dieser Parameter kann zur Überwachung der Verfügbarkeit einer MySQL-Datenbank verwendet werden. Wir können Benutzernamen und Passwort übergeben:

    mysql.ping[zabbix,our_password]

[comment]: # ({/db2a6e16-db2a6e16})

[comment]: # ({dd3ac3fa-dd3ac3fa})
##### Beispiel 3

Wie viele Zeilen in einer Datei entsprechen einem regulären Ausdruck?

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

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

    wc[/etc/passwd,root]
    wc[/etc/services,zabbix]

[comment]: # ({/dd3ac3fa-dd3ac3fa})

[comment]: # ({f7cfa576-a5d86054})
#### Befehlsausgabe

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

::: noteimportant
Ein Datenpunkt, der Text zurückgibt (Zeichen-, Protokoll- oder Texttyp von Informationen), wird bei einer Standardfehlerausgabe nicht als nicht unterstützt markiert.
:::

Der Rückgabewert ist auf 16 MB begrenzt (einschließlich nachfolgender Leerzeichen, die abgeschnitten werden); [Datenbankgrenzen](/manual/config/items/item#text-data-limits) gelten ebenfalls.

Benutzerparameter, die Text zurückgeben (Zeichen-, Protokoll- oder Texttyp von Informationen), können auch Leerzeichen zurückgeben.
Bei einem ungültigen Ergebnis wird der Datenpunkt nicht unterstützt.

[comment]: # ({/f7cfa576-a5d86054})
