3 Skrypty

Przegląd

W sekcji Alerty > Skrypty można konfigurować i utrzymywać globalne skrypty zdefiniowane przez użytkownika.

Globalne skrypty, w zależności od skonfigurowanego zakresu oraz uprawnień użytkownika, są dostępne do uruchomienia:

  • z menu hosta w różnych miejscach frontendu (Pulpit, Problemy, Najnowsze dane, Mapy itp.)
  • z menu zdarzenia
  • mogą być uruchamiane jako operacja akcji

Skrypty są wykonywane na Zabbix agent, serwerze Zabbix (proxy) lub tylko na serwerze Zabbix. Zobacz także Wykonywanie poleceń.

Zarówno na Zabbix agent, jak i Zabbix proxy zdalne skrypty są domyślnie wyłączone. Można je włączyć w następujący sposób:

  • Dla zdalnych poleceń wykonywanych na Zabbix agent:
    • dodając parametr AllowKey=system.run[<command>,*] dla każdego dozwolonego polecenia w konfiguracji agenta; * oznacza tryb wait i nowait;
  • Dla zdalnych poleceń wykonywanych na Zabbix proxy:
    • Ostrzeżenie: Nie jest wymagane włączanie zdalnych poleceń na Zabbix proxy, jeśli zdalne polecenia są wykonywane na Zabbix agent monitorowanym przez Zabbix proxy. Jeśli jednak wymagane jest wykonywanie zdalnych poleceń na Zabbix proxy, ustaw parametr EnableRemoteCommands na '1' w konfiguracji proxy.

Wykonywanie globalnych skryptów na serwerze Zabbix można wyłączyć, ustawiając EnableGlobalScripts=0 w konfiguracji serwera. W nowych instalacjach, począwszy od Zabbix 7.0, wykonywanie globalnych skryptów na serwerze Zabbix jest domyślnie wyłączone.

Wyświetlana jest lista istniejących skryptów wraz z ich szczegółami.

Wyświetlane dane:

Column Description
Name Nazwa skryptu. Kliknięcie nazwy skryptu otwiera formularz konfiguracji skryptu.
Scope Zakres skryptu - operacja akcji, ręczna akcja hosta lub ręczna akcja zdarzenia. To ustawienie określa, gdzie skrypt jest dostępny.
Used in actions Wyświetlane są wszystkie akcje, w których używany jest skrypt, poprzedzone łączną liczbą tych akcji.
Kliknięcie nazwy akcji otwiera formularz konfiguracji akcji. Jeśli użytkownik nie ma uprawnień do akcji, nazwa nie jest klikalna.
Type Wyświetlany jest typ skryptu - polecenie URL, Webhook, Script, SSH, Telnet lub IPMI.
Execute on Wyświetlana jest informacja, czy skrypt będzie wykonywany na Zabbix agent, Zabbix proxy lub serwerze, czy tylko na serwerze Zabbix.
Commands Wyświetlane są wszystkie polecenia, które mają zostać wykonane w ramach skryptu.
Dla webhooków nic nie jest tutaj wyświetlane.
User group Wyświetlana jest grupa użytkowników, dla której skrypt jest dostępny (lub All dla wszystkich grup użytkowników).
Host group Wyświetlana jest grupa hostów, dla której skrypt jest dostępny (lub All dla wszystkich grup hostów).
Host access Wyświetlany jest poziom uprawnień dla grupy hostów - Read lub Write. Tylko użytkownicy z wymaganym poziomem uprawnień będą mieli dostęp do wykonania skryptu.

Aby skonfigurować nowy skrypt, kliknij przycisk Create script w prawym górnym rogu.

Opcje masowej edycji

Przycisk pod listą oferuje jedną opcję masowej edycji:

  • Usuń - usuń skrypty

Aby użyć tej opcji, zaznacz pola wyboru przy odpowiednich skryptach i kliknij Usuń.

Używanie filtra

Możesz użyć filtra, aby wyświetlić tylko te skrypty, które Cię interesują. Dla lepszej wydajności wyszukiwania dane są przeszukiwane z nierozwiniętymi makrami.

Link Filtr jest dostępny nad listą skryptów. Po jego kliknięciu pojawi się filtr, w którym można filtrować skrypty według nazwy i zakresu.

Konfigurowanie skryptu globalnego

Zaleca się używanie funkcji makr zamiast zwykłych makr w skryptach globalnych w celu zwiększenia bezpieczeństwa, ponieważ makra nie są automatycznie poprzedzane znakami ucieczki.

Atrybuty skryptu:

Parametr Opis
Nazwa Unikalna nazwa skryptu.
Np. Clear /tmp filesystem
Zakres Zakres skryptu — operacja akcji, ręczna akcja hosta lub ręczna akcja zdarzenia. To ustawienie określa, gdzie skrypt może być używany — odpowiednio w zdalnych poleceniach operacji akcji, z menu hosta lub z menu zdarzenia.
Ustawienie zakresu na „Operacja akcji” powoduje, że skrypt jest dostępny dla wszystkich użytkowników mających dostęp do Alerty > Akcje.
Jeśli skrypt jest faktycznie używany w akcji, jego zakres nie może zostać zmieniony z „operacja akcji” na inny.
Obsługa makr
Zakres wpływa na zakres dostępnych makr. Na przykład makra związane z użytkownikiem ({USER.*}) są obsługiwane w skryptach, aby umożliwić przekazywanie informacji o użytkowniku, który uruchomił skrypt. Nie są one jednak obsługiwane, jeśli zakresem skryptu jest operacja akcji, ponieważ operacje akcji są wykonywane automatycznie.
Makro {MANUALINPUT} umożliwia określenie ręcznego wejścia w czasie wykonywania skryptu. Jest ono obsługiwane dla skryptów ręcznej akcji hosta i ręcznej akcji zdarzenia.
Aby sprawdzić, które inne makra są obsługiwane, wyszukaj „Trigger-based notifications and commands/Trigger-based commands”, „Manual host action scripts” oraz „Manual event action scripts” w tabeli obsługiwanych makr. Pamiętaj, że jeśli makro może zostać rozwinięte do wartości zawierającej spacje (na przykład nazwa hosta), należy je odpowiednio ująć w cudzysłów.
Ścieżka menu Żądana ścieżka menu do skryptu. Na przykład Default lub Default/ spowoduje wyświetlenie skryptu w odpowiednim katalogu. Menu mogą być zagnieżdżone, np. Main menu/Sub menu1/Sub menu2. Podczas uzyskiwania dostępu do skryptów przez menu hosta/zdarzenia w sekcjach monitorowania będą one uporządkowane zgodnie z podanymi katalogami.
To pole jest wyświetlane tylko wtedy, gdy jako Zakres wybrano „Ręczna akcja hosta” lub „Ręczna akcja zdarzenia”.
Typ Kliknij odpowiedni przycisk, aby wybrać typ skryptu:
URL, Webhook, Skrypt, SSH, Telnet lub polecenie IPMI.
Typ URL jest dostępny tylko wtedy, gdy jako Zakres wybrano „Ręczna akcja hosta” lub „Ręczna akcja zdarzenia”.
Typ skryptu: URL
URL Określ adres URL do szybkiego dostępu z menu hosta lub menu zdarzenia.
Obsługiwane są makra oraz niestandardowe makra użytkownika. Obsługa makr zależy od zakresu skryptu (zobacz Zakres powyżej).
Użyj makra {MANUALINPUT} w tym polu, aby móc określić ręczne wejście w czasie wykonywania skryptu, na przykład:
http://{MANUALINPUT}/zabbix/zabbix.php?action=dashboard.view
Wartości makr nie mogą być kodowane URL.
Otwórz w nowym oknie Określa, czy adres URL powinien zostać otwarty w nowej karcie przeglądarki, czy w tej samej.
Typ skryptu: Webhook
Parametry Określ zmienne webhooka jako pary atrybut-wartość.
Zobacz także: konfiguracja mediów Webhook.
W wartościach parametrów obsługiwane są makra oraz niestandardowe makra użytkownika. Obsługa makr zależy od zakresu skryptu (zobacz Zakres powyżej).
Skrypt Wprowadź kod JavaScript w modalnym edytorze, który otwiera się po kliknięciu w pole parametru lub ikonę ołówka obok niego.
Obsługa makr zależy od zakresu skryptu (zobacz Zakres powyżej).
Zobacz także: konfiguracja mediów Webhook, Dodatkowe obiekty Javascript.
Limit czasu Limit czasu wykonania JavaScript (1-60s, domyślnie 30s).
Obsługiwane są przyrostki czasu, np. 30s, 1m.
Typ skryptu: Skrypt
Wykonaj na Kliknij odpowiedni przycisk, aby wykonać skrypt powłoki na:
Zabbix agent — skrypt zostanie wykonany przez Zabbix agent (jeśli pozycja system.run jest dozwolona) na hoście
Zabbix proxy lub serwer — skrypt zostanie wykonany przez Zabbix proxy lub serwer — w zależności od tego, czy host jest monitorowany przez proxy czy serwer.
Zostanie wykonany na proxy, jeśli jest to włączone przez EnableRemoteCommands.
Zostanie wykonany na serwerze, jeśli skrypty globalne są włączone przez parametr serwera EnableGlobalScripts.
Zabbix serwer — skrypt zostanie wykonany tylko przez Zabbix serwer.
Ta opcja nie będzie dostępna, jeśli skrypty globalne są wyłączone przez parametr serwera EnableGlobalScripts.
Polecenia Wprowadź pełną ścieżkę do poleceń, które mają zostać wykonane w ramach skryptu.
Obsługa makr zależy od zakresu skryptu (zobacz Zakres powyżej). Obsługiwane są niestandardowe makra użytkownika.
Typ skryptu: SSH
Metoda uwierzytelniania Wybierz metodę uwierzytelniania — hasło lub klucz publiczny.
Nazwa użytkownika Wprowadź nazwę użytkownika.
Hasło Wprowadź hasło.
To pole jest dostępne, jeśli jako metodę uwierzytelniania wybrano „Hasło”.
Plik klucza publicznego Wprowadź ścieżkę do pliku klucza publicznego.
To pole jest dostępne, jeśli jako metodę uwierzytelniania wybrano „Klucz publiczny”.
Plik klucza prywatnego Wprowadź ścieżkę do pliku klucza prywatnego.
To pole jest dostępne, jeśli jako metodę uwierzytelniania wybrano „Klucz publiczny”.
Hasło klucza Wprowadź hasło klucza.
To pole jest dostępne, jeśli jako metodę uwierzytelniania wybrano „Klucz publiczny”.
Port Wprowadź port zdalnej usługi SSH na docelowym hoście, z którym Zabbix ma się połączyć.
Polecenia Wprowadź polecenia.
Obsługa makr zależy od zakresu skryptu (zobacz Zakres powyżej). Obsługiwane są niestandardowe makra użytkownika.
Typ skryptu: Telnet
Nazwa użytkownika Wprowadź nazwę użytkownika.
Hasło Wprowadź hasło.
Port Wprowadź port zdalnej usługi Telnet na docelowym hoście, z którym Zabbix ma się połączyć.
Polecenia Wprowadź polecenia.
Obsługa makr zależy od zakresu skryptu (zobacz Zakres powyżej). Obsługiwane są niestandardowe makra użytkownika.
Typ skryptu: IPMI
Polecenie Wprowadź polecenie IPMI.
Obsługa makr zależy od zakresu skryptu (zobacz Zakres powyżej). Obsługiwane są niestandardowe makra użytkownika.
Opis Wprowadź opis skryptu.
Grupa hostów Wybierz grupę hostów, dla której skrypt będzie dostępny (lub Wszystkie dla wszystkich grup hostów).
Grupa użytkowników Wybierz grupę użytkowników, dla której skrypt będzie dostępny (lub Wszystkie dla wszystkich grup użytkowników).
To pole jest wyświetlane tylko wtedy, gdy jako Zakres wybrano „Ręczna akcja hosta” lub „Ręczna akcja zdarzenia”.
Wymagane uprawnienia do hosta Wybierz poziom uprawnień dla grupy hostów — Odczyt lub Zapis. Tylko użytkownicy z wymaganym poziomem uprawnień będą mieli dostęp do wykonywania skryptu.
To pole jest wyświetlane tylko wtedy, gdy jako Zakres wybrano „Ręczna akcja hosta” lub „Ręczna akcja zdarzenia”.
Konfiguracja zaawansowana Kliknij etykietę Konfiguracja zaawansowana, aby wyświetlić opcje konfiguracji zaawansowanej.
To pole jest wyświetlane tylko wtedy, gdy jako Zakres wybrano „Ręczna akcja hosta” lub „Ręczna akcja zdarzenia”.

Konfiguracja zaawansowana

Opcje konfiguracji zaawansowanej są dostępne w zwijanej sekcji Konfiguracja zaawansowana:

Parametr Opis
Włącz dane wejściowe użytkownika Zaznacz pole wyboru, aby włączyć ręczne wprowadzanie danych przez użytkownika przed wykonaniem skryptu.
Ręcznie wprowadzone dane zastąpią wartość makra {MANUALINPUT} w skrypcie.
Zobacz także: Ręczne dane wejściowe użytkownika.
Monit wejściowy Wprowadź własny tekst zachęcający do podania danych przez użytkownika. Ten tekst będzie wyświetlany nad polem wejściowym w wyskakującym oknie Ręczne dane wejściowe.
Aby zobaczyć podgląd wyskakującego okna Ręczne dane wejściowe, kliknij Testuj dane wejściowe użytkownika. Podgląd umożliwia także sprawdzenie, czy ciąg wejściowy jest zgodny z regułą walidacji danych wejściowych (zobacz parametry poniżej).
Obsługa makr i makr użytkownika zależy od zakresu skryptu (zobacz Zakres w ogólnych parametrach konfiguracji skryptu).
Typ danych wejściowych Wybierz typ ręcznie wprowadzanych danych:
Ciąg znaków — pojedynczy ciąg znaków;
Lista rozwijana — wartość jest wybierana z wielu opcji listy rozwijanej.
Opcje listy rozwijanej Wprowadź unikalne wartości dla listy rozwijanej danych wejściowych użytkownika jako listę rozdzielaną przecinkami.
Aby uwzględnić pustą opcję na liście rozwijanej, dodaj dodatkowy przecinek na początku, w środku lub na końcu listy.
To pole jest wyświetlane tylko wtedy, gdy jako Typ danych wejściowych wybrano „Lista rozwijana”.
Domyślny ciąg wejściowy Wprowadź domyślny ciąg dla danych wejściowych użytkownika (lub pozostaw puste).
To pole będzie walidowane względem wyrażenia regularnego podanego w polu Reguła walidacji danych wejściowych.
Wartość wprowadzona tutaj będzie domyślnie wyświetlana w wyskakującym oknie Ręczne dane wejściowe.
To pole jest wyświetlane tylko wtedy, gdy jako Typ danych wejściowych wybrano „Ciąg znaków”.
Reguła walidacji danych wejściowych Wprowadź wyrażenie regularne do walidacji ciągu danych wejściowych użytkownika.
Obsługiwane są globalne wyrażenia regularne.
To pole jest wyświetlane tylko wtedy, gdy jako Typ danych wejściowych wybrano „Ciąg znaków”.
Włącz potwierdzenie Zaznacz pole wyboru, aby przed wykonaniem skryptu wyświetlić komunikat potwierdzający. Ta funkcja może być szczególnie przydatna w przypadku potencjalnie niebezpiecznych operacji (takich jak skrypt restartu) lub takich, które mogą zająć dużo czasu.
Tekst potwierdzenia Wprowadź własny tekst potwierdzenia dla wyskakującego okna potwierdzenia włączonego za pomocą powyższego pola wyboru (na przykład Zdalny system zostanie uruchomiony ponownie. Czy na pewno?). Aby zobaczyć, jak tekst będzie wyglądał, kliknij Testuj potwierdzenie obok pola.
Obsługiwane są makra oraz niestandardowe makra użytkownika.
Uwaga: makra nie będą rozwijane podczas testowania komunikatu potwierdzenia.

Jeśli skonfigurowano zarówno ręczne dane wejściowe użytkownika, jak i komunikat potwierdzenia, zostaną one wyświetlone kolejno w następujących po sobie wyskakujących oknach.

Ręczne dane wejściowe użytkownika

Ręczne dane wejściowe użytkownika pozwalają podać własny parametr przy każdym uruchomieniu skryptu. Eliminuje to konieczność tworzenia wielu podobnych skryptów użytkownika różniących się tylko jednym parametrem.

Na przykład podczas uruchamiania skryptu można chcieć podać inną liczbę całkowitą lub inny adres URL.

Aby włączyć ręczne dane wejściowe użytkownika:

  • użyj makra {MANUALINPUT} w skrypcie (polecenia, skrypt, parametr skryptu) tam, gdzie jest to wymagane; lub w polu URL w skryptach URL;
  • w zaawansowanej konfiguracji skryptu włącz ręczne dane wejściowe użytkownika i skonfiguruj opcje wejściowe.

Po włączeniu danych wejściowych użytkownika, przed wykonaniem skryptu użytkownikowi zostanie wyświetlone wyskakujące okno Ręczne dane wejściowe z prośbą o podanie własnej wartości. Podana wartość zastąpi {MANUALINPUT} w skrypcie.

W zależności od konfiguracji użytkownik zostanie poproszony o wprowadzenie wartości tekstowej:

Lub o wybranie wartości z listy rozwijanej wcześniej zdefiniowanych opcji:

Ręczne dane wejściowe użytkownika są dostępne tylko dla skryptów, w których zakres to „Ręczna akcja hosta” lub „Ręczna akcja zdarzenia”.

Wykonywanie skryptu i wynik

Skrypty uruchamiane przez serwer Zabbix są wykonywane w kolejności opisanej na stronie wykonywania poleceń.

Wynik skryptu jest wyświetlany w wyskakującym oknie, które pojawia się po uruchomieniu skryptu. Wartością zwracaną skryptu jest standardowe wyjście:

  • Jeśli skrypt zakończy się pomyślnie (kod wyjścia 0), wartość zwracana jest ograniczona do 16 MB (włącznie z końcowymi białymi znakami, które są obcinane).
  • Jeśli skrypt zakończy się błędem (niezerowy kod wyjścia), wartością zwracaną jest standardowe wyjście błędów ograniczone do 2 KB.

Domyślnie Zabbix nie przechowuje rozszerzonego wyjścia skryptu. Aby zachować pełne szczegóły wyjścia, można zaimplementować rejestrowanie w samym skrypcie (np. przekierować wyjście do lokalnego pliku dziennika).

Należy pamiętać, że w przypadku skryptów wykonywanych zarówno na serwerze Zabbix, jak i na Zabbix proxy, obowiązują również ograniczenia bazy danych.

Poniżej znajduje się przykład skryptu i okna wyniku:

uname -v
/tmp/non_existing_script.sh
echo "This script was started by {USER.USERNAME}"

Wynik skryptu nie wyświetla samego skryptu.

Limit czasu skryptu

Zabbix agent

Możesz napotkać sytuację, w której podczas wykonywania skryptu wystąpi przekroczenie limitu czasu.

Poniżej przedstawiono przykład skryptu uruchamianego przez Zabbix agent oraz okno z wynikiem:

sleep 5
df -h

Komunikat o błędzie w tym przypadku jest następujący:

Timeout while executing a shell script.

Aby uniknąć takich sytuacji, zaleca się zoptymalizowanie samego skryptu (w powyższym przykładzie „5”) zamiast dostosowywania parametru Timeout w konfiguracji Zabbix agent oraz konfiguracji Zabbix serwer. Jednak w przypadku Zabbix agent w trybie aktywnym parametr Timeout w konfiguracji Zabbix serwer powinien być co najmniej o kilka sekund dłuższy niż parametr RefreshActiveChecks w konfiguracji Zabbix agent. Zapewnia to serwerowi wystarczającą ilość czasu na odebranie wyników aktywnych testów od agenta. Należy pamiętać, że wykonywanie skryptów na aktywnym agencie jest obsługiwane od wersji Zabbix agent 7.0.

Jeśli parametr Timeout został zmieniony w konfiguracji Zabbix agent, pojawi się następujący komunikat o błędzie:

Get value from agent failed: ZBX_TCP_READ() timed out.

Oznacza to, że zmiana została wprowadzona w konfiguracji Zabbix agent, ale konieczne jest również zmodyfikowanie parametru Timeout w konfiguracji Zabbix serwer.

Serwer/proxy Zabbix

Poniżej przedstawiono przykład skryptu uruchamianego na serwerze/proxy Zabbix oraz okno z wynikiem:

sleep 11
df -h

Zaleca się również zoptymalizowanie samego skryptu (zamiast dostosowywania parametru TrapperTimeout do odpowiedniej wartości (w naszym przypadku > 11)) poprzez modyfikację konfiguracji serwera Zabbix.