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 certa condizione.

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

Negli utilizzi più evidenti di questa funzionalità è possibile, ad esempio:

  • 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 file meno recenti, pulendo /tmp) in caso di esaurimento dello spazio disponibile
  • Migrare una VM da una macchina fisica a un'altra 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 un parametro AllowKey=system.run[*] nella configurazione dell'agent;
  • impostando il parametro EnableRemoteCommands a '1' nella configurazione del 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 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

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

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

Quindi, durante la configurazione di una nuova azione in Avvisi → Azioni → Azioni trigger:

  1. Definire le condizioni appropriate, ad esempio impostare che l'azione venga attivata in presenza di qualsiasi problema di gravità disaster in una delle applicazioni Apache.

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

  1. Selezionare uno degli script predefiniti dall'elenco a discesa Operazione e impostare l'Elenco target per lo script.

Script predefiniti

Gli script disponibili per le operazioni delle azioni (webhook, script, SSH, Telnet, IPMI) sono definiti negli script globali.

Per 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).

Notare l'uso di sudo - per impostazione predefinita l'utente Zabbix non dispone delle autorizzazioni 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 - attivo o passivo - deve essere in esecuzione sul host remoto ed esegue i comandi in background.

I comandi remoti su Zabbix agent vengono eseguiti senza timeout tramite la chiave system.run[,nowait] e i risultati dell'esecuzione non vengono controllati. 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 controllati per verificarne i risultati di 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. 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