Parametry użytkownika
Omówienie
Parametr użytkownika umożliwia zdefiniowanie niestandardowego klucza pozycji oraz polecenia używanego do pobrania jego wartości, gdy żaden wbudowany element Zabbix agent nie dostarcza potrzebnych danych. Parametr użytkownika to polecenie zdefiniowane przez użytkownika, do którego odwołuje się zdefiniowany przez użytkownika klucz pozycji i które jest wykonywane przez Zabbix agent podczas sprawdzania odpowiedniej pozycji.
W systemach UNIX agent wykonuje polecenia parametrów użytkownika za pomocą /bin/sh, z uprawnieniami konta systemu operacyjnego, na którym działa agent (zwykle zabbix).
Konto to musi mieć wystarczające uprawnienia do wykonania polecenia oraz dostępu do używanych przez nie plików, gniazd lub danych uwierzytelniających.
Istnieją dwa typy parametrów użytkownika:
- Proste parametry użytkownika nie przyjmują argumentów; definiują stały klucz pozycji oraz polecenie do wykonania.
- Elastyczne parametry użytkownika przyjmują argumenty (określone jako parametry w kluczu pozycji) i przekazują je do polecenia, dzięki czemu jedna definicja może obsługiwać wiele pozycji.
Konfiguracja parametrów użytkownika
Parametr użytkownika definiuje się za pomocą parametru konfiguracyjnego UserParameter.
Parametr użytkownika ma następującą składnię:
UserParameter=<key>,<shell command>
gdzie:
<key>- unikatowy klucz pozycji identyfikujący parametr użytkownika.
Podczas konfigurowania pozycji określ ten klucz, aby odwołać się do polecenia zdefiniowanego przez parametr użytkownika.
W przypadku prostego parametru użytkownika klucz jest stały i nie przyjmuje argumentów. W przypadku elastycznego parametru użytkownika dodaj[*]do klucza (na przykładmysql.status[*]), aby wskazać, że przyjmuje on argumenty. Określ te argumenty jako parametry w kluczu pozycji podczas konfigurowania pozycji. Polecenie może odwoływać się do parametrów za pomocą odwołań pozycyjnych$1–$9.<shell command>- polecenie powłoki lub ścieżka do niestandardowego skryptu, który agent wykonuje w celu uzyskania wartości pozycji.
W przypadku elastycznego parametru użytkownika polecenie może używać odwołań pozycyjnych$1–$9w celu odwołania się do odpowiednich parametrów w kluczu pozycji (na przykładUserParameter=mysql.status[*],mysqladmin status --user=$1 --password=$2). Zabbix analizuje parametry ujęte w[]w kluczu pozycji (tj.mysql.status[zabbix,{$MYSQL.PASSWORD}]) i odpowiednio zastępuje odwołania pozycyjne w poleceniu.
$0jest zastępowane oryginalnym poleceniem przed rozwinięciem odwołań pozycyjnych. Odwołania pozycyjne są interpretowane niezależnie od tego, czy są ujęte w cudzysłowy podwójne (") czy pojedyncze ('). Aby używać odwołań pozycyjnych bez zastępowania, określ dwa znaki dolara. Na przykładawk '{print $$2}'przekazuje$2do polecenia bez zmian.
Należy pamiętać, że odwołania pozycyjne poprzedzone znakiem$są wyszukiwane i zastępowane przez agenta Zabbix tylko w elastycznych parametrach użytkownika. W przypadku prostych parametrów użytkownika odwołania pozycyjne nie są przetwarzane, dlatego nie ma potrzeby stosowania znaków ucieczki przed$.
Niektóre znaki nie mogą być domyślnie przekazywane jako argumenty. Pełną listę znaków można znaleźć w sekcji UnsafeUserParameters.
UserParameter musi być skonfigurowany na każdym agencie Zabbix, który go używa:
- Bezpośrednio w pliku konfiguracyjnym agenta Zabbix (
zabbix_agentd.conflubzabbix_agent2.conf). - W osobnym pliku
*.conf, pod warunkiem że plik ten jest dołączony przez konfigurację agenta.
Na agencie można zdefiniować więcej niż jeden UserParameter, ponieważ można dołączyć wiele plików z różnymi zestawami parametrów.
Każdy parametr użytkownika musi mieć unikatowy klucz pozycji w obrębie monitorowanego host.
Parametr konfiguracyjny UserParameterDir umożliwia określenie katalogu roboczego używanego do wykonywania poleceń UserParameter.
Jeśli parametr jest skonfigurowany, agent zmienia katalog roboczy na określony przed wykonaniem polecenia.
Polecenia można określać za pomocą ścieżki względnej z prefiksem ./, na przykład UserParameter=mykey,./myscript.sh.
Aby skonfigurować parametr użytkownika:
- Napisz niestandardowy skrypt lub polecenie pobierające wymagane dane.
- Dodaj polecenie i jego unikatowy klucz pozycji do parametru konfiguracyjnego
UserParameterw pliku konfiguracyjnym agenta Zabbix (zabbix_agentd.conf). -
Przeładuj parametry użytkownika z pliku konfiguracyjnego, uruchamiając polecenie sterowania w czasie wykonywania:
zabbix_agentd -R userparameter_reload
Alternatywnie uruchom ponownie agenta, aby zastosować zmiany konfiguracji.
- Utwórz nową pozycję na monitorowanym hoście, używając klucza pozycji zdefiniowanego w
UserParameter.
Ustaw typ pozycji na Zabbix Agent lub Zabbix Agent (active).
Upewnij się, że opcja Type of information pozycji jest prawidłowo skonfigurowana; w przeciwnym razie Zabbix odrzuci zwróconą wartość.
Przykład konfigurowania i używania parametrów użytkownika znajduje się w sekcji Rozszerzanie agentów Zabbix.
Parametry użytkownika podlegają limitowi czasu sprawdzania agenta Zabbix. Po upływie limitu czasu proces wykonujący parametr użytkownika zostaje zakończony. Więcej informacji można znaleźć w sekcji Wykonywanie poleceń.
Należy pamiętać, że długo działające skrypty mogą zużywać zasoby systemowe i opóźniać inne sprawdzenia.
Wynik polecenia
Wartość zwracana przez polecenie składa się ze standardowego wyjścia i standardowego wyjścia błędów wygenerowanych przez polecenie.
Parametry użytkownika zwracające tekst (typ informacji Character, Log lub Text) mogą również zwracać białe znaki. Jeśli polecenie wygeneruje nieprawidłowy wynik, pozycja stanie się nieobsługiwana. Jednak pozycja z jednym z tych typów informacji nie stanie się nieobsługiwana wyłącznie dlatego, że polecenie wygeneruje dane na standardowym wyjściu błędów.
Wartość zwracana przez polecenie jest ograniczona do 16 MB, łącznie z końcowymi białymi znakami, które są obcinane. Ograniczenie to jest stosowane przed wykonaniem kroków wstępnego przetwarzania wartości pozycji. Obowiązują również ograniczenia bazy danych.
Przykłady parametrów użytkownika
Ta sekcja zawiera przykłady prostych i elastycznych parametrów użytkownika.
Poniższe przykłady służą wyłącznie do celów demonstracyjnych i nie powinny być używane w środowisku produkcyjnym bez zastosowania odpowiednich zabezpieczeń.
Elastyczne parametry użytkownika zdefiniowane przy użyciu [*] akceptują argumenty, które mogą stwarzać ryzyko wstrzyknięcia poleceń, jeśli nie są bezpiecznie obsługiwane.
Przykłady prostych parametrów użytkownika
Przykład 1: Stała wartość
UserParameter=ping,echo 1
Pozycja z kluczem ping zawsze zwraca wartość 1.
Przykład 2: Dostępność serwera MySQL
UserParameter=mysql.ping,mysqladmin ping 2>/dev/null | grep -c alive
Zwraca wartość 1, jeśli serwer MySQL odpowiada, oraz 0 w przeciwnym razie.
Przekierowanie 2>/dev/null odrzuca standardowe dane wyjściowe błędów polecenia mysqladmin.
Bez niego komunikat o błędzie mógłby zostać zwrócony razem z wartością 0, powodując, że pozycja z typem informacji Numeric stanie się nieobsługiwana (zobacz Wynik polecenia).
Ten przykład zakłada, że dane uwierzytelniające połączenia z MySQL są skonfigurowane dla konta systemu operacyjnego, na którym działa agent Zabbix, na przykład w pliku opcji MySQL dostępnym dla tego konta.
Przykłady elastycznych parametrów użytkownika
Przykład 1: Zwracanie parametru
UserParameter=ping[*],echo $1
Za pomocą tego parametru użytkownika można zdefiniować wiele pozycji z kluczami w formacie ping[parameter]:
ping[0]- zwraca0.ping[hello]- zwracahello.
Przykład 2: Dostępność MySQL na określonym hoście
Ten parametr może służyć do monitorowania dostępności serwera MySQL na określonym hoście.
UserParameter=mysql.ping[*],mysqladmin -h "$1" ping 2>/dev/null | grep -c alive
Pozycja z kluczem mysql.ping[db1.example.com] zwraca wartość 1, jeśli serwer MySQL na tym hoście odpowiada, oraz 0 w przeciwnym razie.
W tym przykładzie przyjęto, że dane uwierzytelniające połączenia z MySQL są skonfigurowane dla konta systemu operacyjnego, na którym działa agent Zabbix, na przykład w pliku opcji MySQL dostępnym dla tego konta.
Przykład 3: Zliczanie wierszy pasujących do wzorca
Ten parametr może służyć do zliczania liczby wierszy w pliku.
UserParameter=grep.count[*],grep -c "$2" "$1"
Zwraca liczbę wierszy w pliku określonym przez pierwszy argument, które pasują do wyrażenia regularnego określonego przez drugi argument.
Na przykład grep.count[/etc/passwd,root] zwraca liczbę wierszy w pliku /etc/passwd, które pasują do wyrażenia regularnego root.