[comment]: # ({70a6015a-70a6015a})
# 5 Parametry użytkownika

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

[comment]: # ({a2e89be7-9a4b2756})
#### Omówienie

Czasami możesz chcieć uruchomić sprawdzenie agent, które nie jest
predefiniowane w Zabbix. W tym miejscu z pomocą przychodzą parametry użytkownika.

Możesz napisać polecenie, które pobiera potrzebne dane, i umieścić je
w parametrze użytkownika w [pliku konfiguracyjnym agenta](/manual/appendix/config/zabbix_agentd) (parametr konfiguracyjny
`UserParameter`).

Parametr użytkownika ma następującą składnię:

    UserParameter=<key>,<command>

Jak widać, parametr użytkownika zawiera również klucz. Klucz będzie
potrzebny podczas konfigurowania pozycji. Wprowadź wybrany przez siebie klucz, który będzie
łatwy do odwołania (musi być unikalny w obrębie host).

Uruchom ponownie agent lub użyj opcji [runtime
control](/manual/concepts/agent#runtime-control) agenta, aby uwzględnić
nowy parametr, np.:

    zabbix_agentd -R userparameter_reload

Następnie, podczas [konfigurowania pozycji](/manual/config/items/item), wprowadź klucz, aby odwołać się do
polecenia z parametru użytkownika, które ma zostać wykonane.

Parametry użytkownika to polecenia wykonywane przez agent Zabbix.
Należy pamiętać, że przed etapami [wstępnego przetwarzania wartości pozycji](/manual/config/items/preprocessing) można zwrócić do 16 MB danych.

**/bin/sh** jest używany jako interpreter wiersza poleceń w systemach operacyjnych UNIX.
Parametry użytkownika podlegają limitowi czasu sprawdzenia agent; jeśli limit czasu zostanie osiągnięty, proces parametru użytkownika uruchomiony przez fork zostanie zakończony.

Zobacz także:

-   [Samouczek krok po kroku](/manual/config/items/userparameters/extending_agent) dotyczący
    korzystania z parametrów użytkownika
-   [Wykonywanie poleceń](/manual/appendix/command_execution)

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

[comment]: # ({53dfad45-53dfad45})
##### Przykłady prostych parametrów użytkownika

Proste polecenie:

    UserParameter=ping,echo 1

agent będzie zawsze zwracał '1' dla pozycji z kluczem 'ping'.

Bardziej złożony przykład:

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

agent zwróci '1', jeśli serwer MySQL działa, w przeciwnym razie '0'.

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

[comment]: # ({64b08883-e619711f})
#### Elastyczne parametry użytkownika

Elastyczne parametry użytkownika akceptują parametry z kluczem. W ten sposób elastyczny parametr użytkownika może stanowić podstawę do tworzenia kilku pozycji.

Elastyczne parametry użytkownika mają następującą składnię:

    UserParameter=key[*],command

|Parameter|Description|
|--|--------|
|**Key**|Unikalny klucz pozycji. \[\*\] oznacza, że ten klucz akceptuje parametry umieszczone w nawiasach.<br>Parametry podaje się podczas konfigurowania pozycji.|
|**Command**|Polecenie, które ma zostać wykonane w celu obliczenia wartości klucza.<br>*Tylko dla elastycznych parametrów użytkownika*:<br>W poleceniu można używać odwołań pozycyjnych $1…$9, aby wskazać odpowiedni parametr w kluczu pozycji.<br>Zabbix analizuje parametry ujęte w \[ \] klucza pozycji i odpowiednio podstawia w poleceniu $1,...,$9.<br>$0 zostanie zastąpione oryginalnym poleceniem (przed rozwinięciem $0,...,$9), które ma zostać uruchomione.<br>Odwołania pozycyjne są interpretowane niezależnie od tego, czy są ujęte w podwójne (") czy pojedyncze (') cudzysłowy.<br>Aby użyć odwołań pozycyjnych bez zmian, należy podać podwójny znak dolara - na przykład awk '{print $$2}'. W takim przypadku `$$2` zostanie podczas wykonywania polecenia zamienione na `$2`.|

::: noteimportant
Odwołania pozycyjne ze znakiem $ są wyszukiwane
i zastępowane przez agent Zabbix tylko dla elastycznych parametrów użytkownika. W przypadku
prostych parametrów użytkownika takie przetwarzanie odwołań jest pomijane i
dlatego nie jest konieczne cytowanie znaku $.
:::

::: noteimportant
Niektóre znaki nie są domyślnie dozwolone w parametrach użytkownika.
Pełną listę znaków można znaleźć w [UnsafeUserParameters](/manual/appendix/config/zabbix_agentd#unsafeuserparameters).
:::

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

[comment]: # ({5c6e8e3c-5c6e8e3c})
##### Przykład 1

Coś bardzo prostego:

    UserParameter=ping[*],echo $1

Możemy zdefiniować nieograniczoną liczbę pozycji do monitorowania, wszystkie w formacie
ping\[coś\].

-   ping\[0\] - zawsze zwróci '0'
-   ping\[aaa\] - zawsze zwróci 'aaa'

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

[comment]: # ({db2a6e16-db2a6e16})
##### Przykład 2

Dodajmy więcej sensu!

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

Ten parametr może być używany do monitorowania dostępności bazy danych MySQL. Możemy przekazać nazwę użytkownika i hasło:

    mysql.ping[zabbix,our_password]

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

[comment]: # ({dd3ac3fa-dd3ac3fa})
##### Przykład 3

Ile linii w pliku pasuje do wyrażenia regularnego?

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

Ten parametr może być używany do obliczania liczby linii w pliku.

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

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

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

Wartość zwracana przez polecenie to standardowe wyjście wraz ze standardowym wyjściem błędów wygenerowanym przez polecenie.

::: noteimportant
Pozycja, która zwraca tekst (informacje typu character, log lub text), nie stanie się nieobsługiwana w przypadku wyjścia standardowego błędów.
:::

Wartość zwracana jest ograniczona do 16 MB (w tym końcowe białe znaki, które są obcinane); obowiązują również [limity bazy danych](/manual/config/items/item#text-data-limits).

Parametry użytkownika, które zwracają tekst (informacje typu character, log lub text), mogą również zwracać biały znak.
W przypadku nieprawidłowego wyniku pozycja stanie się nieobsługiwana.

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