2 Zdalne polecenia

Przegląd

Za pomocą zdalnych poleceń można zdefiniować, że określone, wcześniej zdefiniowane polecenie zostanie automatycznie wykonane na monitorowanym hoście po spełnieniu określonego warunku.

Dzięki temu zdalne polecenia są potężnym mechanizmem inteligentnego, proaktywnego monitorowania.

W najbardziej oczywistych zastosowaniach tej funkcji można spróbować:

  • Automatycznie restartować aplikację (serwer WWW, middleware, CRM), jeśli nie odpowiada
  • Użyć polecenia IPMI „reboot”, aby ponownie uruchomić zdalny serwer, jeśli nie odpowiada na żądania
  • Automatycznie zwalniać miejsce na dysku (usuwanie starszych plików, czyszczenie /tmp), jeśli kończy się wolne miejsce na dysku
  • Migrować maszynę wirtualną z jednego fizycznego serwera na inny w zależności od obciążenia CPU
  • Dodawać nowe węzły do środowiska chmurowego przy niewystarczających zasobach CPU (dysku, pamięci lub innych)

Konfigurowanie akcji dla zdalnych poleceń jest podobne do konfigurowania akcji wysyłania wiadomości; jedyna różnica polega na tym, że Zabbix wykona polecenie zamiast wysyłać wiadomość.

Zdalne polecenia mogą być wykonywane przez serwer Zabbix, proxy lub agent. Zdalne polecenia na Zabbix agent mogą być wykonywane bezpośrednio przez serwer Zabbix lub za pośrednictwem Zabbix proxy. Zarówno na Zabbix agent, jak i Zabbix proxy zdalne polecenia są domyślnie wyłączone. Można je włączyć przez:

  • dodanie parametru AllowKey=system.run[*] w konfiguracji agenta;
  • ustawienie parametru EnableRemoteCommands na „1” w konfiguracji proxy.

Zdalne polecenia wykonywane przez serwer Zabbix są uruchamiane zgodnie z opisem w Command execution, łącznie ze sprawdzaniem kodu wyjścia.

Zdalne polecenia są wykonywane nawet wtedy, gdy docelowy host jest w trybie konserwacji.

Limit zdalnych poleceń

Limit zdalnego polecenia po rozwinięciu wszystkich makr zależy od typu bazy danych i zestawu znaków (znaki spoza ASCII wymagają do zapisania więcej niż jednego bajtu):

Database Limit in characters Limit in bytes
MySQL 65535 65535
PostgreSQL 65535 bez limitu
SQLite (tylko Zabbix proxy) 65535 bez limitu

Dane wyjściowe wykonania zdalnego polecenia (wartość zwracana) są ograniczone do 16 MB (włącznie z końcowymi białymi znakami, które są obcinane). Limit zdalnego polecenia IPMI zależy od zainstalowanej biblioteki IPMI. Należy pamiętać, że limity bazy danych mają zastosowanie do wszystkich zdalnych poleceń.

Konfiguracja

Te zdalne polecenia, które są wykonywane na Zabbix agent (niestandardowe skrypty), muszą być najpierw włączone w konfiguracji agenta.

Upewnij się, że parametr AllowKey=system.run[<command>,*] jest dodany dla każdego dozwolonego polecenia w konfiguracji agenta, aby zezwolić na określone polecenie w trybie nowait. Jeśli zmieniasz ten parametr, uruchom ponownie demon agenta.

Następnie, podczas konfigurowania nowej akcji w Alerty → Akcje → Akcje wyzwalaczy:

  1. Zdefiniuj odpowiednie warunki, na przykład ustaw, aby akcja była aktywowana przy dowolnych problemach o poziomie katastrofa dla jednej z aplikacji Apache.

  1. Na karcie Operacje kliknij Dodaj w bloku Operacje, Operacje odzyskiwania lub Operacje aktualizacji.

  1. Wybierz jeden ze wstępnie zdefiniowanych skryptów z listy rozwijanej Operacja i ustaw Listę docelową dla skryptu.

Predefiniowane skrypty

Skrypty dostępne dla operacji akcji (webhook, skrypt, SSH, Telnet, IPMI) są definiowane w skryptach globalnych.

Na przykład:

sudo /etc/init.d/apache restart 

W tym przypadku Zabbix spróbuje zrestartować proces Apache. W przypadku tego polecenia należy upewnić się, że polecenie jest wykonywane na Zabbix agent (kliknij przycisk Zabbix agent przy opcji Execute on).

Zwróć uwagę na użycie sudo — użytkownik Zabbix domyślnie nie ma uprawnień do restartowania usług systemowych. Poniżej znajdują się wskazówki dotyczące konfiguracji sudo.

Począwszy od Zabbix agent 7.0, polecenia zdalne mogą być również wykonywane na agencie działającym w trybie aktywnym. Zabbix agent — zarówno aktywny, jak i pasywny — powinien działać na zdalnym hoście i wykonuje polecenia w tle.

Polecenia zdalne na Zabbix agent są wykonywane bez limitu czasu przez klucz system.run[,nowait] i nie są sprawdzane pod kątem wyników wykonania. Na Zabbix serwer i Zabbix proxy polecenia zdalne są wykonywane z limitem czasu ustawionym w parametrze TrapperTimeout pliku zabbix_server.conf lub zabbix_proxy.conf, a ich wyniki wykonania są sprawdzane. Dodatkowe informacje można znaleźć w sekcji Limit czasu skryptu.

Uprawnienia dostępu

Upewnij się, że użytkownik 'zabbix' ma uprawnienia do wykonywania skonfigurowanych poleceń. Można rozważyć użycie sudo, aby przyznać dostęp do uprzywilejowanych poleceń. Aby skonfigurować dostęp, wykonaj jako root:

visudo

Przykładowe linie, które można umieścić w pliku sudoers:

# pozwala użytkownikowi 'zabbix' uruchamiać wszystkie polecenia bez hasła.
zabbix ALL=NOPASSWD: ALL

# pozwala użytkownikowi 'zabbix' restartować apache bez hasła.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart

W niektórych systemach plik sudoers uniemożliwia użytkownikom nielokalnym wykonywanie poleceń. Aby to zmienić, zakomentuj opcję requiretty w /etc/sudoers.

Zdalne polecenia przy wielu interfejsach

Jeśli system docelowy ma wiele interfejsów wybranego typu (agent Zabbix lub IPMI), zdalne polecenia będą wykonywane na domyślnym interfejsie.

Możliwe jest wykonywanie zdalnych poleceń przez SSH i Telnet przy użyciu interfejsu innego niż interfejs agenta Zabbix. Dostępny interfejs do użycia jest wybierany w następującej kolejności:

  • Domyślny interfejs agenta Zabbix
  • Domyślny interfejs SNMP
  • Domyślny interfejs JMX
  • Domyślny interfejs IPMI

Zdalne polecenia IPMI

Dla zdalnych poleceń IPMI należy używać następującej składni:

<command> [<value>]

gdzie

  • <command> - jedno z poleceń IPMI bez spacji
  • <value> - 'on', 'off' lub dowolna nieujemna liczba całkowita. <value> jest parametrem opcjonalnym.

Przykłady

Przykłady globalnych skryptów, które mogą być używane jako zdalne polecenia w operacjach akcji.

Przykład 1

Restart systemu Windows przy określonym warunku.

Aby automatycznie zrestartować system Windows po wykryciu problemu przez Zabbix, zdefiniuj następujący skrypt:

Parametr skryptu Wartość
Zakres 'Operacja akcji'
Typ 'Skrypt'
Polecenie c:\windows\system32\shutdown.exe -r -f

Przykład 2

Uruchom ponownie host przy użyciu sterowania IPMI.

Parametr skryptu Wartość
Zakres 'Operacja akcji'
Typ 'IPMI'
Polecenie reset

Przykład 3

Wyłącz zasilanie hosta za pomocą sterowania IPMI.

Parametr skryptu Wartość
Zakres 'Operacja akcji'
Typ 'IPMI'
Polecenie power off