Comandi remoti

Panoramica

Con i comandi remoti puoi definire che un determinato comando predefinito venga eseguito automaticamente sull'host monitorato al verificarsi di una certa condizione.

I comandi remoti sono quindi un meccanismo potente per un monitoraggio proattivo intelligente.

Negli usi più evidenti di questa funzionalità puoi provare a:

  • Riavviare automaticamente una determinata applicazione (web server, middleware, CRM) se non risponde
  • Usare il comando IPMI 'reboot' per riavviare un server remoto se non risponde alle richieste
  • Liberare automaticamente spazio su disco (rimuovendo i file più vecchi, pulendo /tmp) se lo spazio su disco sta per esaurirsi
  • Migrare una VM da un server fisico a un altro in base al carico della CPU
  • Aggiungere nuovi nodi a un ambiente cloud in caso di risorse CPU (disco, memoria o altro) insufficienti

La configurazione di un'azione per i comandi remoti è simile a quella per l'invio di un messaggio; l'unica differenza è che Zabbix eseguirà un comando invece di inviare un messaggio.

I comandi remoti possono essere eseguiti da Zabbix server, proxy o agent. I comandi remoti su Zabbix agent possono essere eseguiti direttamente da Zabbix server oppure tramite Zabbix proxy. Sia su Zabbix agent sia su Zabbix proxy i comandi remoti sono disabilitati per impostazione predefinita. Possono essere abilitati:

  • aggiungendo il parametro AllowKey=system.run[*] nella configurazione dell'agent;
  • impostando il parametro EnableRemoteCommands su 1 nella configurazione del proxy.

I comandi remoti eseguiti da Zabbix server vengono eseguiti come descritto in Esecuzione dei comandi, inclusa la verifica del codice di uscita.

I comandi remoti vengono eseguiti anche se l'host di destinazione è in manutenzione.

Limite dei comandi remoti

Il limite dei comandi remoti, dopo la risoluzione di tutte le macro, dipende dal tipo di database e dal set di caratteri (i caratteri non ASCII richiedono più di un byte per essere memorizzati):

Database Limite in caratteri Limite in byte
MySQL 65535 65535
PostgreSQL 65535 non limitato
SQLite (solo Zabbix proxy) 65535 non limitato

L'output dell'esecuzione dei comandi remoti (valore restituito) è limitato a 16 MB (inclusi gli spazi finali che vengono troncati). Il limite del comando remoto IPMI si basa sulla libreria IPMI installata. Si noti che i limiti del database si applicano a tutti i comandi remoti.

Configurazione

I comandi remoti eseguiti su Zabbix agent (script personalizzati) devono prima essere abilitati nella configurazione dell'agent.

Assicurati che il parametro AllowKey=system.run[<command>,*] venga aggiunto per ogni comando consentito nella configurazione dell'agent per consentire un comando specifico in modalità nowait. Riavvia il daemon dell'agent se modifichi questo parametro.

Quindi, quando configuri una nuova azione in Alerts > Actions > Trigger actions:

  1. Definisci le condizioni appropriate, ad esempio, imposta che l'azione venga attivata in caso di problemi di gravità disaster relativi a una delle applicazioni Apache.

  1. Nella scheda Operations, fai clic su Add nel blocco Operations, Recovery operations o Update operations.

  1. Seleziona uno degli script predefiniti dall'elenco a discesa Operation e imposta la Target list per lo script.

Script predefiniti

Gli script disponibili per le operazioni degli action (webhook, script, SSH, Telnet, IPMI) sono definiti negli script globali con Action operation selezionato come ambito.

Ad esempio:

sudo /etc/init.d/apache restart 

In questo caso, Zabbix tenterà di riavviare un processo Apache. Con questo comando, assicurati che il comando venga eseguito su Zabbix agent (fai clic sul pulsante Zabbix agent accanto a Execute on).

Nota l'uso di sudo - l'utente Zabbix non dispone per impostazione predefinita dei permessi necessari per riavviare i servizi di sistema. Vedi sotto per suggerimenti su come configurare sudo.

A partire da Zabbix agent 7.0, i comandi remoti possono essere eseguiti anche su un agent che opera in modalità attiva. Zabbix agent - sia attivo sia passivo - deve essere in esecuzione sull'host remoto ed esegue i comandi in background.

I comandi remoti su Zabbix agent vengono eseguiti senza timeout dalla chiave system.run[,nowait] e non vengono controllati per i risultati dell'esecuzione. Su Zabbix server e Zabbix proxy, i comandi remoti vengono eseguiti con il timeout impostato nel parametro TrapperTimeout del file zabbix_server.conf o zabbix_proxy.conf e vengono verificati per i risultati dell'esecuzione. Per ulteriori informazioni, consulta Script timeout.

Permessi di accesso

Assicurarsi che l'utente zabbix disponga dei permessi di esecuzione per i comandi configurati. Potrebbe essere utile usare sudo per concedere accesso a comandi con privilegi elevati. Per configurare l'accesso, eseguire come root:

visudo

Esempi di righe che potrebbero essere usate nel file sudoers:

# consente all'utente 'zabbix' di eseguire tutti i comandi senza password.
zabbix ALL=NOPASSWD: ALL

# consente all'utente 'zabbix' di riavviare apache senza password.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart

Su alcuni sistemi, il file sudoers impedirà agli utenti non locali di eseguire comandi. Per modificare questo comportamento, commentare l'opzione requiretty in /etc/sudoers.

Comandi remoti con più interfacce

Se il sistema di destinazione ha più interfacce del tipo selezionato (Zabbix agent o IPMI), i comandi remoti verranno eseguiti sull'interfaccia predefinita.

È possibile eseguire comandi remoti tramite SSH e Telnet utilizzando un'interfaccia diversa da quella di Zabbix agent. L'interfaccia disponibile da utilizzare viene selezionata nel seguente ordine:

  • Interfaccia predefinita di Zabbix agent
  • Interfaccia predefinita SNMP
  • Interfaccia predefinita JMX
  • Interfaccia predefinita IPMI

Comandi remoti IPMI

Per i comandi remoti IPMI deve essere utilizzata la seguente sintassi:

<command> [<value>]

dove

  • <command> - uno dei comandi IPMI senza spazi
  • <value> - 'on', 'off' o qualsiasi intero senza segno. <value> è un parametro facoltativo.

Esempi

Esempi di script globali che possono essere utilizzati come comandi remoti nelle operazioni delle azioni.

Esempio 1

Riavvio di Windows in determinate condizioni.

Per riavviare automaticamente Windows in caso di un problema rilevato da Zabbix, definire il seguente script:

Script parameter Value
Scope 'Action operation'
Type 'Script'
Command c:\windows\system32\shutdown.exe -r -f

Esempio 2

Riavviare l'host utilizzando il controllo IPMI.

Parametro dello script Valore
Ambito 'Operazione dell'azione'
Tipo 'IPMI'
Comando reset

Esempio 3

Spegnere il host utilizzando il controllo IPMI.

Parametro dello script Valore
Ambito 'Operazione dell'azione'
Tipo 'IPMI'
Comando power off