2 Comandi remoti
Panoramica
Con i comandi remoti è possibile definire che un determinato comando predefinito venga eseguito automaticamente sul host monitorato al verificarsi di una condizione.
I comandi remoti sono quindi un potente meccanismo per un monitoraggio proattivo e 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 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 il 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 modalità di esecuzione (waitonowait). - Per i comandi remoti eseguiti da Zabbix proxy, impostare il parametro
EnableRemoteCommandssu1nella 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 sul host.
Per motivi di sicurezza, è consigliabile 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 (per memorizzare i caratteri non ASCII è necessario più di un byte):
| Database | Limite in caratteri | Limite in byte |
|---|---|---|
| MySQL | 65535 | 65535 |
| PostgreSQL | 65535 | non limitato |
| SQLite (solo proxy Zabbix) | 65535 | non limitato |
L'output dell'esecuzione del comando remoto (valore restituito) è limitato a 16 MB (inclusi gli spazi bianchi 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 sull'agent Zabbix (script personalizzati) devono essere prima abilitati nella configurazione dell'agent.
Assicurarsi che il parametro AllowKey=system.run[<command>,*] sia aggiunto nella configurazione dell'agent per ogni comando consentito, in modo da consentire l'esecuzione di comandi specifici con la modalità nowait. Riavviare il demone dell'agent se si modifica questo parametro.
Quindi, quando si configura una nuova azione in Avvisi > Azioni > Azioni trigger:
- Definire le condizioni appropriate, ad esempio impostare l'attivazione dell'azione in caso di problemi di tipo disaster relativi a una delle applicazioni Apache.

- Nella scheda Operazioni, fare clic su Aggiungi nel blocco Operazioni, Operazioni di ripristino o Operazioni di aggiornamento.

- Selezionare uno degli script predefiniti dall'elenco a discesa Operazione e impostare l'Elenco di destinazioni per lo script.

Script predefiniti
Gli script disponibili per le operazioni di azione (webhook, script, SSH, Telnet, IPMI) sono definiti negli script globali, selezionando Operazione di azione 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 sull'agent Zabbix (fare clic sul pulsante Agent Zabbix accanto a Esegui su).
Notare l'uso di sudo: per impostazione predefinita, l'utente Zabbix non dispone delle autorizzazioni per riavviare i servizi di sistema. Di seguito sono riportate alcune indicazioni 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. L'agent Zabbix, sia attivo che passivo, deve essere in esecuzione sull'host remoto ed esegue i comandi in background.
I comandi remoti sull'agent Zabbix vengono eseguiti senza timeout tramite la chiave system.run[,nowait] e non vengono verificati per determinarne i risultati dell'esecuzione.
Sul server Zabbix e sul proxy Zabbix, 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 determinarne i risultati dell'esecuzione.
Per ulteriori informazioni, vedere Timeout dello script.
Permessi di accesso
Assicurarsi che l'utente 'zabbix' disponga dei permessi di esecuzione per i comandi configurati.
È possibile utilizzare sudo per concedere l'accesso ai 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 impedisce agli utenti non locali di eseguire i comandi.
Per modificare questo comportamento, commentare l'opzione requiretty in /etc/sudoers.
Comandi remoti con più interfacce
Se il sistema di destinazione dispone di più interfacce del tipo selezionato (Zabbix agent o IPMI), i comandi remoti verranno eseguiti tramite l'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 è necessario utilizzare la seguente sintassi:
<command> [<value>]
dove
- <command> - uno dei comandi IPMI senza spazi
- <value> - 'on', 'off' o qualsiasi numero 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 quando Zabbix rileva un problema, 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 |