2 Comandi remoti

Panoramica

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

Pertanto, i comandi remoti sono un potente meccanismo per il monitoraggio proattivo intelligente.

Tra gli utilizzi più ovvi di questa funzionalità è possibile:

  • Riavviare automaticamente un'applicazione (web server, middleware, CRM) se non risponde
  • Utilizzare il comando IPMI 'reboot' per riavviare un server remoto se non risponde alle richieste
  • Liberare automaticamente spazio su disco (rimuovendo i file meno recenti, pulendo /tmp) quando lo spazio su disco sta per esaurirsi
  • Migrare una VM da un sistema fisico a un altro in base al carico della CPU
  • Aggiungere nuovi nodi a un ambiente cloud quando le risorse della CPU (disco, memoria o altro) sono 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, Zabbix proxy o Zabbix agent. Tenere presente quanto segue:

  • I comandi remoti su Zabbix agent possono essere eseguiti direttamente da Zabbix server o tramite Zabbix proxy.
  • I comandi remoti eseguiti da Zabbix server vengono eseguiti come descritto in Esecuzione dei comandi, incluso il controllo del codice di uscita.
  • I comandi remoti vengono eseguiti anche se l'host di destinazione è in modalità manutenzione.

I comandi remoti sono disabilitati per impostazione predefinita sia su Zabbix agent sia su Zabbix proxy. Possono essere abilitati come segue:

  • Per i comandi remoti eseguiti da Zabbix agent, aggiungere un parametro AllowKey=system.run[<command>,*] per ogni comando consentito nella configurazione dell'agent, dove * corrisponde a una delle due modalità di esecuzione (wait o nowait).
  • Per i comandi remoti eseguiti da Zabbix proxy, impostare il parametro EnableRemoteCommands su 1 nella configurazione del proxy. Tenere presente che non è necessario abilitare i comandi remoti su Zabbix proxy quando vengono eseguiti da Zabbix agent su un host monitorato dal proxy.

Non utilizzare AllowKey=system.run[*] se non necessario, poiché consente l'esecuzione di qualsiasi comando sull'host. Per motivi di sicurezza, si consiglia di consentire solo comandi esatti, mentre system.run[*] è negato per impostazione predefinita (DenyKey=system.run[*]).

Vedere anche Limitazione dei controlli dell'agent.

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
Oracle Database 2048 4000
PostgreSQL 65535 non limitato
SQLite (solo Zabbix proxy) 65535 non limitato

L'output dell'esecuzione del comando remoto (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 agent Zabbix (script personalizzati) devono prima essere abilitati nella configurazione dell'agent.

Assicurarsi che il parametro AllowKey=system.run[<command>,*] sia aggiunto per ogni comando consentito nella configurazione dell'agent per consentire un comando specifico in modalità nowait. Riavviare il daemon dell'agent se si modifica questo parametro.

Quindi, quando si configura una nuova azione in Alerts → Actions → Trigger actions:

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

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

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

Script predefiniti

Gli script disponibili per le operazioni di azione (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, assicurarsi che il comando venga eseguito su Zabbix agent (fare clic sul pulsante Zabbix agent accanto a Execute on).

Si noti l'uso di sudo - l'utente Zabbix non ha, per impostazione predefinita, i permessi per riavviare i servizi di sistema. Vedere 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 che 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 di 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 di esecuzione. Per ulteriori informazioni, vedere Script timeout.

Permessi di accesso

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

visudo

Esempi di righe che possono essere utilizzate 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 a una determinata condizione.

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

Parametro dello script Valore
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