3 Skrypty
Przegląd
W sekcji Alerts > Scripts można konfigurować i utrzymywać globalne skrypty definiowane przez użytkownika.
Globalne skrypty, w zależności od skonfigurowanego zakresu, a także uprawnień użytkownika, są dostępne do wykonania:
- z menu hosta w różnych lokalizacjach frontend (Dashboard, Problems, Latest data, Maps itp.)
- z menu zdarzenia
- mogą być uruchamiane jako operacja akcji
Skrypty są wykonywane na agent, Zabbix server (proxy) lub tylko na Zabbix server Zobacz także Command execution.
Zarówno na agent, jak i na proxy Zabbix zdalne skrypty są domyślnie wyłączone. Można je włączyć przez:
- Dla zdalnych poleceń wykonywanych na agent Zabbix:
- dodanie parametru AllowKey=system.run[<command>,*] dla każdego dozwolonego polecenia w konfiguracji agent, * oznacza tryb wait i nowait;
- Dla zdalnych poleceń wykonywanych na proxy Zabbix:
- Ostrzeżenie: Nie jest wymagane włączanie zdalnych poleceń na proxy Zabbix, jeśli zdalne polecenia są wykonywane na agent Zabbix monitorowanym przez proxy Zabbix. Jeśli jednak konieczne jest wykonywanie zdalnych poleceń na proxy Zabbix, ustaw parametr EnableRemoteCommands na wartość '1' w konfiguracji proxy.
Wykonywanie globalnych skryptów na Zabbix server można wyłączyć, ustawiając EnableGlobalScripts=0 w konfiguracji serwera.
W przypadku nowych instalacji, od Zabbix 7.0, wykonywanie globalnych skryptów na Zabbix server jest domyślnie wyłączone.
Wyświetlana jest lista istniejących skryptów wraz ze 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 - URL, Webhook, Script, SSH, Telnet lub polecenie IPMI. |
| Execute on | Wyświetlane jest, czy skrypt będzie wykonywany na agent, proxy lub serwer, czy tylko na Zabbix server. |
| Commands | Wyświetlane są wszystkie polecenia, które mają zostać wykonane w ramach skryptu. W przypadku webhooków nic tutaj nie jest 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. Dostęp do wykonywania skryptu będą mieli tylko użytkownicy z wymaganym poziomem uprawnień. |
Aby skonfigurować nowy skrypt, kliknij przycisk Create script w prawym górnym rogu.
Opcje masowej edycji
Przycisk poniżej listy oferuje jedną opcję masowej edycji:
- Usuń - usuń skrypty
Aby użyć tej opcji, zaznacz pola wyboru przed odpowiednimi skryptami i kliknij Usuń.
Korzystanie z filtra
Możesz użyć filtra, aby wyświetlić tylko interesujące Cię skrypty. Aby poprawić wydajność wyszukiwania, dane są przeszukiwane z nierozwiązanymi makrami.
Łącze Filter jest dostępne nad listą skryptów. Po jego kliknięciu pojawi się filtr, za pomocą którego możesz filtrować skrypty według nazwy i zakresu.

Konfigurowanie globalnego skryptu

Zaleca się używanie funkcji makr zamiast zwykłych makr w globalnych skryptach, aby zwiększyć bezpieczeństwo, ponieważ makra nie są automatycznie escape'owane.
Atrybuty skryptu:
| Parameter | Description | |
|---|---|---|
| Name | Unikalna nazwa skryptu. Np. Clear /tmp filesystem |
|
| Scope | 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 'Action operation' sprawia, że skrypt jest dostępny dla wszystkich użytkowników mających dostęp do Alerts > Actions. Jeśli skrypt jest faktycznie używany w akcji, jego zakresu nie można zmienić z dala od 'action operation'. Obsługa makr Zakres wpływa na zestaw 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ą jednak obsługiwane, jeśli zakresem skryptu jest operacja akcji, ponieważ operacje akcji są wykonywane automatycznie. Makro {MANUALINPUT} umożliwia podanie ręcznego wejścia w momencie wykonywania skryptu. Jest obsługiwane dla skryptów ręcznej akcji hosta i ręcznej akcji zdarzenia. Aby sprawdzić, jakie inne makra są obsługiwane, wyszukaj w tabeli obsługiwanych makr hasła 'Trigger-based notifications and commands/Trigger-based commands', 'Manual host action scripts' oraz 'Manual event action scripts'. Należy pamiętać, że jeśli makro może zostać rozwinięte do wartości zawierającej spacje (na przykład nazwa hosta), nie zapomnij ująć jej w cudzysłów, jeśli to konieczne. |
|
| Menu path | Docelowa ścieżka menu dla skryptu. Na przykład Default lub Default/ wyświetli skrypt 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 Scope wybrano 'Manual host action' lub 'Manual event action'. |
|
| Type | Kliknij odpowiedni przycisk, aby wybrać typ skryptu: URL, Webhook, Script, SSH, Telnet lub polecenie IPMI. Typ URL jest dostępny tylko wtedy, gdy jako Scope wybrano 'Manual host action' lub 'Manual event action'. |
|
| 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 Scope powyżej). Użyj makra {MANUALINPUT} w tym polu, aby można było podać ręczne wejście w momencie wykonywania skryptu, na przykład: http://{MANUALINPUT}/zabbix/zabbix.php?action=dashboard.viewWartości makr nie mogą być kodowane w formacie URL. |
|
| Open in new window | Określa, czy adres URL ma zostać otwarty w nowej, czy w tej samej karcie przeglądarki. | |
| Typ skryptu: Webhook | ||
| Parameters | Określ zmienne webhooka jako pary atrybut-wartość. Zobacz także konfigurację mediów Webhook. Obsługiwane są makra oraz niestandardowe makra użytkownika w wartościach parametrów. Obsługa makr zależy od zakresu skryptu (zobacz Scope powyżej). |
|
| Script | Wprowadź kod JavaScript w edytorze modalnym, który otwiera się po kliknięciu w pole parametru lub w ikonę ołówka obok niego. Obsługa makr zależy od zakresu skryptu (zobacz Scope powyżej). Zobacz także konfigurację mediów Webhook, Additional Javascript objects. |
|
| Timeout | Limit czasu wykonania JavaScript (1-60 s, domyślnie 30 s). Obsługiwane są sufiksy czasu, np. 30s, 1m. |
|
| Typ skryptu: Script | ||
| Execute on | 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 or server - 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 globalne skrypty są włączone przez parametr serwera EnableGlobalScripts. Zabbix server - skrypt zostanie wykonany wyłącznie przez Zabbix server. Ta opcja nie będzie dostępna, jeśli globalne skrypty są wyłączone przez parametr serwera EnableGlobalScripts. |
|
| Commands | Wprowadź pełną ścieżkę do poleceń, które mają zostać wykonane w skrypcie. Obsługa makr zależy od zakresu skryptu (zobacz Scope powyżej). Obsługiwane są niestandardowe makra użytkownika. |
|
| Typ skryptu: SSH | ||
| Authentication method | Wybierz metodę uwierzytelniania - hasło lub klucz publiczny. | |
| Username | Wprowadź nazwę użytkownika. | |
| Password | Wprowadź hasło. To pole jest dostępne, jeśli jako metodę uwierzytelniania wybrano 'Password'. |
|
| Public key file | Wprowadź ścieżkę do pliku klucza publicznego. To pole jest dostępne, jeśli jako metodę uwierzytelniania wybrano 'Public key'. |
|
| Private key file | Wprowadź ścieżkę do pliku klucza prywatnego. To pole jest dostępne, jeśli jako metodę uwierzytelniania wybrano 'Public key'. |
|
| Passphrase | Wprowadź hasło dostępu. To pole jest dostępne, jeśli jako metodę uwierzytelniania wybrano 'Public key'. |
|
| Port | Wprowadź port zdalnej usługi SSH na hostcie docelowym, z którym połączy się Zabbix. | |
| Commands | Wprowadź polecenia. Obsługa makr zależy od zakresu skryptu (zobacz Scope powyżej). Obsługiwane są niestandardowe makra użytkownika. |
|
| Typ skryptu: Telnet | ||
| Username | Wprowadź nazwę użytkownika. | |
| Password | Wprowadź hasło. | |
| Port | Wprowadź port zdalnej usługi Telnet na hostcie docelowym, z którym połączy się Zabbix. | |
| Commands | Wprowadź polecenia. Obsługa makr zależy od zakresu skryptu (zobacz Scope powyżej). Obsługiwane są niestandardowe makra użytkownika. |
|
| Typ skryptu: IPMI | ||
| Command | Wprowadź polecenie IPMI. Obsługa makr zależy od zakresu skryptu (zobacz Scope powyżej). Obsługiwane są niestandardowe makra użytkownika. |
|
| Description | Wprowadź opis skryptu. | |
| Host group | Wybierz grupę hostów, dla której skrypt będzie dostępny (lub All dla wszystkich grup hostów). | |
| User group | Wybierz grupę użytkowników, dla której skrypt będzie dostępny (lub All dla wszystkich grup użytkowników). To pole jest wyświetlane tylko wtedy, gdy jako Scope wybrano 'Manual host action' lub 'Manual event action'. |
|
| Required host permissions | Wybierz poziom uprawnień dla grupy hostów - Read lub Write. Tylko użytkownicy z wymaganym poziomem uprawnień będą mieli dostęp do uruchamiania skryptu. To pole jest wyświetlane tylko wtedy, gdy jako Scope wybrano 'Manual host action' lub 'Manual event action'. |
|
| Advanced configuration | Kliknij nagłówek Advanced configuration, aby wyświetlić opcje zaawansowanej konfiguracji. To pole jest wyświetlane tylko wtedy, gdy jako Scope wybrano 'Manual host action' lub 'Manual event action'. |
|
Zaawansowana konfiguracja
Opcje zaawansowanej konfiguracji są dostępne w zwijanej sekcji Zaawansowana konfiguracja:

| Parameter | Description |
|---|---|
| Włącz dane wejściowe użytkownika | Zaznacz pole wyboru, aby włączyć ręczne dane wejściowe użytkownika przed wykonaniem skryptu. Ręczne dane wejściowe użytkownika zastąpią wartość makra {MANUALINPUT} w skrypcie. Zobacz także: Ręczne dane wejściowe użytkownika. |
| Monit wejściowy | Wprowadź własny tekst z prośbą o podanie niestandardowych danych wejściowych użytkownika. Ten tekst zostanie wyświetlony nad polem wejściowym w oknie podręcznym Ręczne dane wejściowe. Aby zobaczyć podgląd okna podręcznego Ręczne dane wejściowe, kliknij Testuj dane wejściowe użytkownika. Podgląd umożliwia również 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ęcznych danych wejściowych: String - pojedynczy ciąg; Dropdown - wartość jest wybierana spośród 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 opcję 'Dropdown'. |
| Domyślny ciąg wejściowy | Wprowadź domyślny ciąg dla danych wejściowych użytkownika (lub brak). To pole zostanie zweryfikowane względem wyrażenia regularnego podanego w polu Reguła walidacji danych wejściowych. Wprowadzona tutaj wartość będzie domyślnie wyświetlana w oknie podręcznym Ręczne dane wejściowe. To pole jest wyświetlane tylko wtedy, gdy jako Typ danych wejściowych wybrano opcję 'String'. |
| 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 opcję 'String'. |
| Włącz potwierdzenie | Zaznacz pole wyboru, aby wyświetlić komunikat potwierdzenia przed wykonaniem skryptu. Ta funkcja może być szczególnie przydatna w przypadku potencjalnie niebezpiecznych operacji (takich jak skrypt restartu) lub takich, które mogą trwać długo. |
| Tekst potwierdzenia | Wprowadź własny tekst potwierdzenia dla okna podręcznego potwierdzenia włączonego za pomocą powyższego pola wyboru (na przykład Zdalny system zostanie uruchomiony ponownie. Czy na pewno?). Aby zobaczyć, jak będzie wyglądał tekst, kliknij Testuj potwierdzenie obok pola. Obsługiwane są makra oraz niestandardowe makra użytkownika. Uwaga: makra nie zostaną rozwinięte podczas testowania komunikatu potwierdzenia. |
Jeśli skonfigurowano zarówno ręczne dane wejściowe użytkownika, jak i komunikat potwierdzenia, zostaną one wyświetlone w kolejnych oknach podręcznych.
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.
Przekroczenie czasu skryptu na agent
Może wystąpić sytuacja, w której podczas wykonywania skryptu nastąpi przekroczenie czasu.
Poniżej przedstawiono przykład skryptu uruchamianego na agent oraz okno z wynikiem:
sleep 5
df -h

W takim przypadku komunikat o błędzie ma następującą treść:
Timeout while executing a shell script.
Aby uniknąć takich sytuacji, zaleca się optymalizację samego skryptu (w powyższym przykładzie: "5"), zamiast dostosowywania parametru Timeout w konfiguracji agent Zabbix oraz konfiguracji serwer Zabbix.
Jeśli parametr Timeout został zmieniony w konfiguracji agent Zabbix, 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 agent Zabbix, ale konieczna jest również modyfikacja parametru Timeout w konfiguracji serwer Zabbix.
Limit czasu skryptu na agentach aktywnych
Możliwe jest wykonywanie skryptów na agentach działających wyłącznie w trybie aktywnym. Gdy wykonanie skryptu zostanie wyzwolone przez operację akcji lub ręczne uruchomienie skryptu, polecenie jest dołączane do konfiguracji aktywnego sprawdzania i wykonywane, gdy aktywny agent je otrzyma.
Skrypty uruchamiane ręcznie są wysyłane do aktywnego agenta wraz z limitem czasu serwer/proxy dla wykonania skryptu. Zwiększ domyślny limit czasu serwer/proxy dla wykonania skryptu. Limit czasu musi być większy niż częstotliwość odświeżania aktywnego sprawdzania, w przeciwnym razie limit czasu zostanie przekroczony, zanim aktywny agent otrzyma skrypt i będzie mógł zwrócić wynik.
Limit czasu skryptu na serwerze/proxy Zabbix
Poniżej przedstawiono przykład skryptu uruchamianego na serwerze 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).