2 Zdalne polecenia

Przegląd

Za pomocą zdalnych poleceń można zdefiniować, że określone, wstępnie zdefiniowane polecenie zostanie automatycznie wykonane na monitorowanym hoście po wystąpieniu określonego warunku.

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

W najbardziej oczywistych zastosowaniach tej funkcji można:

  • Automatycznie uruchomić ponownie aplikację (serwer WWW, middleware, CRM), jeśli nie odpowiada
  • Użyć polecenia IPMI „reboot” do ponownego uruchomienia zdalnego serwera, jeśli nie odpowiada na żądania
  • Automatycznie zwolnić miejsce na dysku (usuwając starsze pliki, czyszcząc katalog /tmp), jeśli zaczyna go brakować
  • Migrować maszynę wirtualną z jednego serwera fizycznego na inny w zależności od obciążenia procesora
  • Dodawać nowe węzły do środowiska chmurowego w przypadku niewystarczających zasobów procesora (dysku, pamięci lub innych)

Konfigurowanie akcji dla zdalnych poleceń jest podobne do konfigurowania akcji wysyłania wiadomości. Jedyną różnicą jest to, że Zabbix wykona polecenie zamiast wysłać wiadomość.

Zdalne polecenia mogą być wykonywane przez serwer Zabbix, proxy Zabbix lub agenta Zabbix. Należy pamiętać, że:

  • Zdalne polecenia na agencie Zabbix mogą być wykonywane bezpośrednio przez serwer Zabbix lub za pośrednictwem proxy Zabbix.
  • Zdalne polecenia wykonywane przez serwer Zabbix są uruchamiane zgodnie z opisem w sekcji Wykonywanie poleceń, w tym z kontrolą kodu wyjścia.
  • Zdalne polecenia są wykonywane nawet wtedy, gdy docelowy host znajduje się w trybie konserwacji.

Zdalne polecenia są domyślnie wyłączone zarówno na agencie Zabbix, jak i na proxy Zabbix. Można je włączyć w następujący sposób:

  • W przypadku zdalnych poleceń wykonywanych przez agenta Zabbix dodaj parametr AllowKey=system.run[<command>,*] dla każdego dozwolonego polecenia w konfiguracji agenta, gdzie * odpowiada dowolnemu trybowi wykonywania (wait lub nowait).
  • W przypadku zdalnych poleceń wykonywanych przez proxy Zabbix ustaw parametr EnableRemoteCommands na 1 w konfiguracji proxy. Należy pamiętać, że nie trzeba włączać zdalnych poleceń na proxy Zabbix, gdy są one wykonywane przez agenta Zabbix na hoście monitorowanym przez proxy.

Nie używaj AllowKey=system.run[*], chyba że jest to konieczne, ponieważ umożliwia to wykonywanie dowolnych poleceń na hoście. Ze względów bezpieczeństwa zaleca się zezwalanie wyłącznie na dokładnie określone polecenia, natomiast system.run[*] jest domyślnie blokowane (DenyKey=system.run[*]).

Zobacz także Ograniczanie kontroli agenta.

Limit poleceń zdalnych

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

Baza danych Limit w znakach Limit w bajtach
MySQL 65535 65535
PostgreSQL 65535 bez ograniczeń
SQLite (tylko proxy Zabbix) 65535 bez ograniczeń

Dane wyjściowe wykonywania polecenia zdalnego (wartość zwracana) są ograniczone do 16 MB (włącznie z końcowymi znakami odstępu, 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 poleceń zdalnych.

Konfiguracja

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

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

Następnie podczas konfigurowania nowej akcji w Alerts > Actions > Trigger actions:

  1. Zdefiniuj odpowiednie warunki, na przykład ustaw, aby akcja była aktywowana w przypadku dowolnych problemów o poziomie katastrofalnym dotyczących jednej z aplikacji Apache.

  1. Na karcie Operations kliknij Add w bloku Operations, Recovery operations lub Update operations.

  1. Wybierz jeden ze wstępnie zdefiniowanych skryptów z listy rozwijanej Operation i ustaw dla skryptu Target list.

Wstępnie zdefiniowane skrypty

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

Na przykład:

sudo /etc/init.d/apache restart 

W tym przypadku Zabbix spróbuje ponownie uruchomić proces Apache. W przypadku tego polecenia upewnij się, że jest ono wykonywane na agencie Zabbix (kliknij przycisk Agent Zabbix przy opcji Wykonaj na).

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

Począwszy od agenta Zabbix 7.0, zdalne polecenia mogą być również wykonywane na agencie działającym w trybie aktywnym. Agent Zabbix - niezależnie od tego, czy działa w trybie aktywnym, czy pasywnym - powinien działać na zdalnym hoście i wykonywać polecenia w tle.

Zdalne polecenia na agencie Zabbix są wykonywane bez limitu czasu za pomocą klucza system.run[,nowait], a wyniki ich wykonania nie są sprawdzane. Na serwerze Zabbix i proxy zdalne polecenia są wykonywane z limitem czasu ustawionym w parametrze TrapperTimeout pliku zabbix_server.conf lub zabbix_proxy.conf, a wyniki ich wykonania są sprawdzane. Więcej informacji znajdziesz w sekcji Limit czasu skryptu.

Uprawnienia dostępu

Upewnij się, że użytkownik „zabbix” ma uprawnienia do wykonywania skonfigurowanych poleceń. Możesz użyć sudo, aby zapewnić dostęp do poleceń wymagających podwyższonych uprawnień. Aby skonfigurować dostęp, wykonaj jako root:

visudo

Przykładowe wiersze, których można użyć w pliku sudoers:

# umożliwia użytkownikowi „zabbix” uruchamianie wszystkich poleceń bez hasła.
zabbix ALL=NOPASSWD: ALL

# umożliwia użytkownikowi „zabbix” ponowne uruchomienie 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 pliku /etc/sudoers.

Zdalne polecenia z wieloma interfejsami

Jeśli system docelowy ma wiele interfejsów wybranego typu (agent Zabbix lub IPMI), zdalne polecenia zostaną wykonane za pośrednictwem interfejsu domyślnego.

Zdalne polecenia można wykonywać za pośrednictwem SSH i Telnet, korzystając z interfejsu innego niż interfejs agenta Zabbix. Dostępny interfejs 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

W przypadku 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 liczba całkowita bez znaku. <value> jest parametrem opcjonalnym.

Przykłady

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

Przykład 1

Ponowne uruchomienie systemu Windows po spełnieniu określonego warunku.

Aby automatycznie ponownie uruchamiać 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