3 Script

Panoramica

Nella sezione Avvisi > Script è possibile configurare e gestire script globali definiti dall'utente.

Gli script globali, a seconda dell'ambito configurato e anche dei permessi utente, sono disponibili per l'esecuzione:

  • dal menu host in varie posizioni del frontend (Dashboard, Problemi, Ultimi dati, Mappe, ecc.)
  • dal menu evento
  • possono essere eseguiti come operazione di un'azione

Gli script vengono eseguiti su Zabbix agent, Zabbix server (proxy) oppure solo su Zabbix server. Vedere anche Esecuzione dei comandi.

Sia su Zabbix agent che su Zabbix proxy gli script remoti sono disabilitati per impostazione predefinita. Possono essere abilitati come segue:

  • Per i comandi remoti eseguiti su Zabbix agent:
    • aggiungendo un parametro AllowKey=system.run[<command>,*] per ciascun comando consentito nella configurazione dell'agent, dove * indica la modalità wait e nowait;
  • Per i comandi remoti eseguiti su Zabbix proxy:
    • Avviso: non è necessario abilitare i comandi remoti su Zabbix proxy se i comandi remoti vengono eseguiti su Zabbix agent monitorato da Zabbix proxy. Tuttavia, se è necessario eseguire comandi remoti su Zabbix proxy, impostare il parametro EnableRemoteCommands a '1' nella configurazione del proxy.

L'esecuzione degli script globali su Zabbix server può essere disabilitata impostando EnableGlobalScripts=0 nella configurazione del server. Per le nuove installazioni, da Zabbix 7.0, l'esecuzione degli script globali su Zabbix server è disabilitata per impostazione predefinita.

Viene visualizzato un elenco degli script esistenti con i relativi dettagli.

Dati visualizzati:

Column Description
Name Nome dello script. Facendo clic sul nome dello script si apre il modulo di configurazione dello script.
Scope Ambito dello script: operazione di un'azione, azione manuale sull'host o azione manuale sull'evento. Questa impostazione determina dove lo script è disponibile.
Used in actions Vengono visualizzate tutte le azioni in cui lo script è utilizzato, precedute dal numero totale di tali azioni.
Facendo clic sul nome dell'azione si apre il modulo di configurazione dell'azione. Se l'utente non dispone dei permessi per l'azione, il nome non è cliccabile.
Type Viene visualizzato il tipo di script: comando URL, Webhook, Script, SSH, Telnet o IPMI.
Execute on Viene indicato se lo script sarà eseguito su Zabbix agent, Zabbix proxy o server, oppure solo su Zabbix server.
Commands Vengono visualizzati tutti i comandi da eseguire all'interno dello script.
Per i webhook qui non viene visualizzato nulla.
User group Viene visualizzato il gruppo utenti per cui lo script è disponibile (oppure All per tutti i gruppi utenti).
Host group Viene visualizzato il gruppo host per cui lo script è disponibile (oppure All per tutti i gruppi host).
Host access Viene visualizzato il livello di permesso per il gruppo host: Read o Write. Solo gli utenti con il livello di permesso richiesto avranno accesso all'esecuzione dello script.

Per configurare un nuovo script, fare clic sul pulsante Create script nell'angolo superiore destro.

Opzioni di modifica di massa

Un pulsante sotto l'elenco offre un'opzione di modifica di massa:

  • Delete - elimina gli script

Per utilizzare questa opzione, seleziona le caselle di controllo davanti ai rispettivi script e fai clic su Delete.

Utilizzo del filtro

È possibile utilizzare il filtro per visualizzare solo gli script di interesse. Per ottenere prestazioni di ricerca migliori, i dati vengono cercati con le macro non risolte.

Il link Filtro è disponibile sopra l'elenco degli script. Facendo clic su di esso, viene visualizzato un filtro che consente di filtrare gli script per nome e ambito.

Configurazione di uno script globale

Si consiglia di utilizzare le funzioni macro invece delle macro semplici negli script globali per migliorare la sicurezza, poiché le macro non vengono sottoposte automaticamente all'escaping.

Attributi dello script:

Parametro Descrizione
Name Nome univoco dello script.
Ad es. Clear /tmp filesystem
Scope Ambito dello script: operazione di azione, azione manuale sull'host o azione manuale sull'evento. Questa impostazione determina dove può essere utilizzato lo script: nei comandi remoti delle operazioni di azione, dal menu host o dal menu evento rispettivamente.
Impostando l'ambito su 'Action operation', lo script sarà disponibile per tutti gli utenti con accesso a Alerts > Actions.
Se uno script è effettivamente utilizzato in un'azione, il suo ambito non può essere modificato da 'action operation' a un altro valore.
Supporto macro
L'ambito influisce sull'intervallo di macro disponibili. Ad esempio, le macro relative all'utente ({USER.*}) sono supportate negli script per consentire il passaggio di informazioni sull'utente che ha avviato lo script. Tuttavia, non sono supportate se l'ambito dello script è action operation, poiché le operazioni di azione vengono eseguite automaticamente.
Una macro {MANUALINPUT} consente di specificare un input manuale al momento dell'esecuzione dello script. È supportata per gli script di azione manuale sull'host e di azione manuale sull'evento.
Per sapere quali altre macro sono supportate, cerca 'Trigger-based notifications and commands/Trigger-based commands', 'Manual host action scripts' e 'Manual event action scripts' nella tabella delle macro supportate. Nota che se una macro può risolversi in un valore contenente spazi (ad esempio, il nome host), non dimenticare di racchiuderla tra virgolette se necessario.
Menu path Percorso di menu desiderato per lo script. Ad esempio, Default o Default/ visualizzerà lo script nella directory corrispondente. I menu possono essere nidificati, ad es. Main menu/Sub menu1/Sub menu2. Quando si accede agli script tramite il menu host/evento nelle sezioni di monitoraggio, essi saranno organizzati in base alle directory specificate.
Questo campo viene visualizzato solo se come Scope è selezionato 'Manual host action' o 'Manual event action'.
Type Fai clic sul pulsante corrispondente per selezionare il tipo di script:
comando URL, Webhook, Script, SSH, Telnet o IPMI.
Il tipo URL è disponibile solo quando come Scope è selezionato 'Manual host action' o 'Manual event action'.
Tipo di script: URL
URL Specifica l'URL per l'accesso rapido dal menu host o dal menu evento.
Sono supportate le macro e le macro utente personalizzate. Il supporto macro dipende dall'ambito dello script (vedi Scope sopra).
Usa la macro {MANUALINPUT} in questo campo per poter specificare un input manuale al momento dell'esecuzione dello script, ad esempio:
http://{MANUALINPUT}/zabbix/zabbix.php?action=dashboard.view
I valori delle macro non devono essere codificati come URL.
Open in new window Determina se l'URL deve essere aperto in una nuova scheda del browser o nella stessa.
Tipo di script: Webhook
Parameters Specifica le variabili del webhook come coppie attributo-valore.
Vedi anche: configurazione del tipo di supporto Webhook.
Le macro e le macro utente personalizzate sono supportate nei valori dei parametri. Il supporto macro dipende dall'ambito dello script (vedi Scope sopra).
Script Inserisci il codice JavaScript nell'editor modale che si apre facendo clic nel campo del parametro o sull'icona della matita accanto ad esso.
Il supporto macro dipende dall'ambito dello script (vedi Scope sopra).
Vedi anche: configurazione del tipo di supporto Webhook, Oggetti Javascript aggiuntivi.
Timeout Timeout di esecuzione JavaScript (1-60s, predefinito 30s).
I suffissi temporali sono supportati, ad es. 30s, 1m.
Tipo di script: Script
Execute on Fai clic sul pulsante corrispondente per eseguire lo script shell su:
Zabbix agent - lo script verrà eseguito da Zabbix agent (se il item system.run è consentito) sull'host
Zabbix proxy or server - lo script verrà eseguito da Zabbix proxy o server, a seconda che l'host sia monitorato dal proxy o dal server.
Verrà eseguito sul proxy se abilitato da EnableRemoteCommands.
Verrà eseguito sul server se gli script globali sono abilitati dal parametro server EnableGlobalScripts.
Zabbix server - lo script verrà eseguito solo da Zabbix server.
Questa opzione non sarà disponibile se gli script globali sono disabilitati dal parametro server EnableGlobalScripts.
Commands Inserisci il percorso completo dei comandi da eseguire all'interno dello script.
Il supporto macro dipende dall'ambito dello script (vedi Scope sopra). Sono supportate le macro utente personalizzate.
Tipo di script: SSH
Authentication method Seleziona il metodo di autenticazione: password o chiave pubblica.
Username Inserisci il nome utente.
Password Inserisci la password.
Questo campo è disponibile se come metodo di autenticazione è selezionato 'Password'.
Public key file Inserisci il percorso del file della chiave pubblica.
Questo campo è disponibile se come metodo di autenticazione è selezionato 'Public key'.
Private key file Inserisci il percorso del file della chiave privata.
Questo campo è disponibile se come metodo di autenticazione è selezionato 'Public key'.
Passphrase Inserisci la passphrase.
Questo campo è disponibile se come metodo di autenticazione è selezionato 'Public key'.
Port Inserisci la porta del servizio SSH remoto sull'host di destinazione a cui Zabbix si connetterà.
Commands Inserisci i comandi.
Il supporto macro dipende dall'ambito dello script (vedi Scope sopra). Sono supportate le macro utente personalizzate.
Tipo di script: Telnet
Username Inserisci il nome utente.
Password Inserisci la password.
Port Inserisci la porta del servizio Telnet remoto sull'host di destinazione a cui Zabbix si connetterà.
Commands Inserisci i comandi.
Il supporto macro dipende dall'ambito dello script (vedi Scope sopra). Sono supportate le macro utente personalizzate.
Tipo di script: IPMI
Command Inserisci il comando IPMI.
Il supporto macro dipende dall'ambito dello script (vedi Scope sopra). Sono supportate le macro utente personalizzate.
Description Inserisci una descrizione per lo script.
Host group Seleziona il gruppo host per il quale lo script sarà disponibile (oppure All per tutti i gruppi host).
User group Seleziona il gruppo utenti a cui lo script sarà disponibile (oppure All per tutti i gruppi utenti).
Questo campo viene visualizzato solo se come Scope è selezionato 'Manual host action' o 'Manual event action'.
Required host permissions Seleziona il livello di autorizzazione per il gruppo host: Read o Write. Solo gli utenti con il livello di autorizzazione richiesto avranno accesso all'esecuzione dello script.
Questo campo viene visualizzato solo se come Scope è selezionato 'Manual host action' o 'Manual event action'.
Advanced configuration Fai clic sull'etichetta Advanced configuration per visualizzare le opzioni di configurazione avanzata.
Questo campo viene visualizzato solo se come Scope è selezionato 'Manual host action' o 'Manual event action'.

Configurazione avanzata

Le opzioni di configurazione avanzata sono disponibili in una sezione comprimibile Configurazione avanzata:

Parametro Descrizione
Abilita input utente Selezionare la casella per abilitare l'input utente manuale prima dell'esecuzione dello script.
L'input utente manuale sostituirà il valore della macro {MANUALINPUT} nello script.
Vedere anche: Input utente manuale.
Prompt di input Inserire un testo personalizzato che richieda un input utente personalizzato. Questo testo verrà visualizzato sopra il campo di input nel popup Input manuale.
Per vedere un'anteprima del popup Input manuale, fare clic su Test input utente. L'anteprima consente anche di verificare se la stringa di input è conforme alla regola di validazione dell'input (vedere i parametri sotto).
Il supporto per macro e macro utente dipende dall'ambito dello script (vedere Ambito nei parametri generali di configurazione dello script).
Tipo di input Selezionare il tipo di input manuale:
Stringa - stringa singola;
Menu a discesa - il valore viene selezionato da più opzioni del menu a discesa.
Opzioni del menu a discesa Inserire valori univoci per il menu a discesa dell'input utente in un elenco delimitato da virgole.
Per includere un'opzione vuota nel menu a discesa, aggiungere una virgola aggiuntiva all'inizio, al centro o alla fine dell'elenco.
Questo campo viene visualizzato solo se come Tipo di input è selezionato 'Menu a discesa'.
Stringa di input predefinita Inserire la stringa predefinita per l'input utente (oppure nessuna).
Questo campo verrà convalidato rispetto all'espressione regolare fornita nel campo Regola di validazione dell'input.
Il valore inserito qui verrà visualizzato per impostazione predefinita nel popup Input manuale.
Questo campo viene visualizzato solo se come Tipo di input è selezionato 'Stringa'.
Regola di validazione dell'input Inserire un'espressione regolare per convalidare la stringa di input dell'utente.
Le espressioni regolari globali sono supportate.
Questo campo viene visualizzato solo se come Tipo di input è selezionato 'Stringa'.
Abilita conferma Selezionare la casella per visualizzare un messaggio di conferma prima dell'esecuzione dello script. Questa funzionalità può essere particolarmente utile con operazioni potenzialmente pericolose (come uno script di riavvio) o che potrebbero richiedere molto tempo.
Testo di conferma Inserire un testo di conferma personalizzato per il popup di conferma abilitato con la casella sopra (ad esempio, Il sistema remoto verrà riavviato. Continuare?). Per vedere come apparirà il testo, fare clic su Test conferma accanto al campo.
Sono supportate le macro e le macro utente personalizzate.
Nota: le macro non verranno espanse durante il test del messaggio di conferma.

Se sono configurati sia l'input utente manuale sia un messaggio di conferma, verranno visualizzati in finestre popup consecutive.

Input utente manuale

L'input utente manuale consente di fornire un parametro personalizzato a ogni esecuzione dello script. In questo modo si evita la necessità di creare più script utente simili che differiscono solo per un singolo parametro.

Ad esempio, durante l'esecuzione potresti voler fornire allo script un numero intero diverso o un indirizzo URL diverso.

Per abilitare l'input utente manuale:

  • utilizzare la macro {MANUALINPUT} nello script (comandi, script, parametro dello script) dove richiesto; oppure nel campo URL degli script URL;
  • nella configurazione avanzata dello script, abilitare l'input utente manuale e configurare le opzioni di input.

Con l'input utente abilitato, prima dell'esecuzione dello script, all'utente verrà mostrato un popup Input manuale che richiederà di fornire un valore personalizzato. Il valore fornito sostituirà {MANUALINPUT} nello script.

A seconda della configurazione, all'utente verrà richiesto di inserire un valore stringa:

Oppure di selezionare il valore da un menu a discesa con opzioni predefinite:

L'input utente manuale è disponibile solo per gli script in cui l'ambito è 'Manual host action' o 'Manual event action'.

Esecuzione dello script e risultato

Gli script eseguiti da Zabbix server vengono eseguiti nell'ordine descritto nella pagina sull'esecuzione dei comandi.

Il risultato dello script viene visualizzato in una finestra pop-up che appare dopo l'esecuzione dello script. Il valore restituito dallo script è l'output standard:

  • Se lo script termina correttamente (codice di uscita 0), il valore restituito è limitato a 16 MB (inclusi gli spazi finali che vengono troncati).
  • Se lo script termina con un errore (codice di uscita diverso da zero), il valore restituito è l'errore standard limitato a 2 KB.

Per impostazione predefinita, Zabbix non memorizza l'output esteso dello script. Per conservare i dettagli completi dell'output, è possibile implementare la registrazione all'interno dello script stesso (ad esempio, reindirizzando l'output a un file di log locale).

Si noti che per gli script eseguiti su Zabbix server o Zabbix proxy si applicano anche i limiti del database.

Di seguito è riportato un esempio di script e della finestra del risultato:

uname -v
/tmp/non_existing_script.sh
echo "This script was started by {USER.USERNAME}"

Il risultato dello script non mostra lo script stesso.

Timeout dello script

Zabbix agent

Potresti riscontrare una situazione in cui si verifica un timeout durante l'esecuzione di uno script.

Di seguito è riportato un esempio di script in esecuzione su Zabbix agent e la relativa finestra dei risultati:

sleep 5
df -h

Il messaggio di errore, in questo caso, è il seguente:

Timeout while executing a shell script.

Per evitare tali situazioni, si consiglia di ottimizzare lo script stesso (nell'esempio sopra, "5") invece di modificare il parametro Timeout nella configurazione di Zabbix agent e nella configurazione di Zabbix server. Tuttavia, per Zabbix agent in modalità attiva, il parametro Timeout nella configurazione di Zabbix server deve essere di almeno alcuni secondi superiore al parametro RefreshActiveChecks nella configurazione di Zabbix agent. Questo garantisce che il server abbia tempo sufficiente per ricevere dall'agent i risultati dei controlli attivi. Si noti che l'esecuzione di script su un agent attivo è supportata a partire da Zabbix agent 7.0.

Nel caso in cui il parametro Timeout sia stato modificato nella configurazione di Zabbix agent, verrà visualizzato il seguente messaggio di errore:

Get value from agent failed: ZBX_TCP_READ() timed out.

Ciò significa che la modifica è stata effettuata nella configurazione di Zabbix agent, ma è necessario modificare anche il parametro Timeout nella configurazione di Zabbix server.

Zabbix server/proxy

Di seguito è riportato un esempio di script in esecuzione su Zabbix server e la finestra del risultato:

sleep 11
df -h

Si consiglia inoltre di ottimizzare lo script stesso (invece di regolare il parametro TrapperTimeout su un valore corrispondente (nel nostro caso, > 11)) modificando la configurazione di Zabbix server.