3 Script
Panoramica
Nella sezione Avvisi > Script è possibile configurare e gestire gli script globali definiti dall'utente.
Questo menu è disponibile solo per gli utenti di tipo SuperAdmin.
Gli script globali, in base all'ambito configurato e alle autorizzazioni dell'utente, sono disponibili per l'esecuzione:
- Dal menu host in varie sezioni del frontend (Dashboard, Problemi, Ultimi dati, Mappe, ecc.).
- Dal menu evento.
- Possono essere eseguiti come operazione di un'azione.
Gli script vengono eseguiti da Zabbix agent, Zabbix server (proxy) o solo da Zabbix server. Vedere anche Esecuzione dei comandi.
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 sull'host.
Per motivi di sicurezza, è consigliabile consentire solo comandi esatti, mentre system.run[*] è negato per impostazione predefinita (DenyKey=system.run[*]).
L'esecuzione degli script globali su Zabbix server può essere disabilitata impostando EnableGlobalScripts=0 nella configurazione del server.
Per le nuove installazioni a partire 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:
| Colonna | Descrizione |
|---|---|
| Nome | Nome dello script. Facendo clic sul nome dello script si apre il modulo di configurazione dello script. |
| Ambito | Ambito dello script: operazione di un'azione, azione manuale sull'host o azione manuale sull'evento. Questa impostazione determina dove è disponibile lo script: nei comandi remoti delle operazioni dell'azione, dal menu host o dal menu evento, rispettivamente. |
| Utilizzato nelle azioni | Vengono visualizzate tutte le azioni in cui viene utilizzato lo script, 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 delle autorizzazioni per l'azione, il nome non è selezionabile. |
| Tipo | Viene visualizzato il tipo di script: comando URL, Webhook, Script, SSH, Telnet o IPMI. |
| Esegui su | Indica se lo script verrà eseguito su Zabbix agent, Zabbix proxy o server, oppure solo su Zabbix server. |
| Comandi | Vengono visualizzati tutti i comandi da eseguire nello script. Per i webhook non viene visualizzato nulla. |
| Gruppo utenti | Viene visualizzato il gruppo di utenti per il quale lo script è disponibile (oppure Tutti per tutti i gruppi di utenti). |
| Gruppo host | Viene visualizzato il gruppo di host per il quale lo script è disponibile (oppure Tutti per tutti i gruppi di host). |
| Accesso all'host | Viene visualizzato il livello di autorizzazione per il gruppo di host: Lettura o Scrittura. Solo gli utenti con il livello di autorizzazione richiesto potranno eseguire lo script. |
Per configurare un nuovo script, fare clic sul pulsante Crea script nell'angolo superiore destro.
Opzioni di modifica massiva
Un pulsante sotto l'elenco offre una opzione di modifica massiva:
- Elimina - elimina gli script
Per usare questa opzione, seleziona le caselle di controllo accanto ai rispettivi script e fai clic su Elimina.
Uso del filtro
È possibile usare il filtro per visualizzare solo gli script di interesse. Per migliorare le prestazioni di ricerca, i dati vengono cercati con i macro non risolti.
Il link Filter è disponibile sopra l'elenco degli script. Se lo si fa clic, diventa disponibile un filtro con cui è possibile 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 a escape.
Attributi dello script:
| Parametro | Descrizione | |
|---|---|---|
| Nome | Nome univoco dello script. Ad esempio, Clear /tmp filesystem |
|
| Ambito | Ambito dello script: operazione di azione, azione manuale sull'host o azione manuale sull'evento. Questa impostazione determina dove è possibile utilizzare lo script: nei comandi remoti delle operazioni dell'azione, dal menu dell'host o dal menu dell'evento, rispettivamente. Impostando l'ambito su "Operazione di azione", lo script sarà disponibile per tutti gli utenti con accesso a Avvisi > Azioni. Se uno script viene effettivamente utilizzato in un'azione, il suo ambito non può essere modificato da "operazione di azione". Supporto delle macro L'ambito influisce sull'insieme 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 è "operazione di azione", poiché le operazioni di azione vengono eseguite automaticamente.Una macro {MANUALINPUT} consente di specificare un input manuale al momento dell'esecuzione dello script. È supportata dagli script di azione manuale sull'host e di azione manuale sull'evento. Per sapere quali altre macro sono supportate, cercare "Notifiche e comandi basati sui trigger/Comandi basati sui trigger", "Script di azione manuale sull'host" e "Script di azione manuale sull'evento" nella tabella delle macro supportate. Se una macro può restituire un valore contenente spazi (ad esempio, il nome dell'host), non dimenticare di racchiuderla tra virgolette quando necessario. |
|
| Percorso del menu | Percorso del menu desiderato per lo script. Ad esempio, Default o Default/ visualizzerà lo script nella directory corrispondente. I menu possono essere nidificati, ad esempio Menu principale/Sottomenu1/Sottomenu2. Quando si accede agli script tramite il menu dell'host/evento nelle sezioni di monitoraggio, saranno organizzati in base alle directory specificate.Questo campo viene visualizzato solo se per Ambito è selezionato "Azione manuale sull'host" o "Azione manuale sull'evento". |
|
| Tipo | Fare clic sul pulsante corrispondente per selezionare il tipo di script: comando URL, Webhook, Script, SSH, Telnet o IPMI. Il tipo URL è disponibile solo quando per Ambito è selezionato "Azione manuale sull'host" o "Azione manuale sull'evento". |
|
| Tipo di script: URL | ||
| URL | Specificare l'URL per l'accesso rapido dal menu dell'host o dal menu dell'evento. Le macro e le macro utente personalizzate sono supportate. Il supporto delle macro dipende dall'ambito dello script (vedere Ambito sopra). Utilizzare 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.viewI valori delle macro non devono essere codificati nell'URL. |
|
| Apri in una nuova finestra | Determina se l'URL deve essere aperto in una scheda nuova o nella scheda corrente del browser. | |
| Tipo di script: Webhook | ||
| Parametri | Specificare le variabili del webhook come coppie attributo-valore. Vedere anche: configurazione del supporto Webhook. Nei valori dei parametri sono supportate le macro e le macro utente personalizzate. Il supporto delle macro dipende dall'ambito dello script (vedere Ambito sopra). |
|
| Script | Inserire il codice JavaScript nell'editor modale che si apre facendo clic nel campo del parametro o sull'icona a forma di matita accanto a esso. Il supporto delle macro dipende dall'ambito dello script (vedere Ambito sopra). Vedere anche: configurazione del supporto Webhook, Oggetti JavaScript aggiuntivi. |
|
| Timeout | Timeout di esecuzione JavaScript (1-60 s, valore predefinito 30 s). Sono supportati i suffissi temporali (ad esempio, 30s, 1m). |
|
| Tipo di script: Script | ||
| Esegui su | Fare clic sul pulsante corrispondente per eseguire lo script shell su: Zabbix agent - lo script verrà eseguito da Zabbix agent (se l'item system.run è consentito) sull'host Zabbix proxy o 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. |
|
| Comandi | Inserire il percorso completo dei comandi da eseguire nello script. Il supporto delle macro dipende dall'ambito dello script (vedere Ambito sopra). Sono supportate le macro utente personalizzate. |
|
| Tipo di script: SSH | ||
| Metodo di autenticazione | Selezionare il metodo di autenticazione: password o chiave pubblica. | |
| Nome utente | Inserire il nome utente. | |
| Password | Inserire la password. Questo campo è disponibile se come metodo di autenticazione è selezionato "Password". |
|
| File della chiave pubblica | Inserire il percorso del file della chiave pubblica. Questo campo è disponibile se come metodo di autenticazione è selezionato "Chiave pubblica". |
|
| File della chiave privata | Inserire il percorso del file della chiave privata. Questo campo è disponibile se come metodo di autenticazione è selezionato "Chiave pubblica". |
|
| Passphrase | Inserire la passphrase. Questo campo è disponibile se come metodo di autenticazione è selezionato "Chiave pubblica". |
|
| Porta | Inserire la porta del servizio SSH remoto sull'host di destinazione a cui Zabbix si connetterà. | |
| Comandi | Inserire i comandi. Il supporto delle macro dipende dall'ambito dello script (vedere Ambito sopra). Sono supportate le macro utente personalizzate. |
|
| Tipo di script: Telnet | ||
| Nome utente | Inserire il nome utente. | |
| Password | Inserire la password. | |
| Porta | Inserire la porta del servizio Telnet remoto sull'host di destinazione a cui Zabbix si connetterà. | |
| Comandi | Inserire i comandi. Il supporto delle macro dipende dall'ambito dello script (vedere Ambito sopra). Sono supportate le macro utente personalizzate. |
|
| Tipo di script: IPMI | ||
| Comando | Inserire il comando IPMI. Il supporto delle macro dipende dall'ambito dello script (vedere Ambito sopra). Sono supportate le macro utente personalizzate. |
|
| Descrizione | Inserire una descrizione per lo script. | |
| Gruppo di host | Selezionare il gruppo di host per il quale lo script sarà disponibile (oppure Tutti per tutti i gruppi di host). | |
| Gruppo di utenti | Selezionare il gruppo di utenti per il quale lo script sarà disponibile (oppure Tutti per tutti i gruppi di utenti). Questo campo viene visualizzato solo se per Ambito è selezionato "Azione manuale sull'host" o "Azione manuale sull'evento". |
|
| Autorizzazioni host richieste | Selezionare il livello di autorizzazione per il gruppo di host: Lettura o Scrittura. Solo gli utenti con il livello di autorizzazione richiesto potranno eseguire lo script. Questo campo viene visualizzato solo se per Ambito è selezionato "Azione manuale sull'host" o "Azione manuale sull'evento". |
|
| Configurazione avanzata | Fare clic sull'intestazione Configurazione avanzata per visualizzare le opzioni di configurazione avanzata. Questo campo viene visualizzato solo se per Ambito è selezionato "Azione manuale sull'host" o "Azione manuale sull'evento". |
|
Configurazione avanzata
Le opzioni di configurazione avanzata sono disponibili nella sezione comprimibile Configurazione avanzata:

| Parametro | Descrizione |
|---|---|
| Abilita input dell'utente | Selezionare la casella di controllo per abilitare l'input manuale dell'utente prima dell'esecuzione dello script. L'input manuale dell'utente sostituirà il valore della macro {MANUALINPUT} nello script. Vedere anche: Input manuale dell'utente. |
| Prompt di input | Inserire il testo personalizzato che richiede l'input dell'utente. Questo testo verrà visualizzato sopra il campo di input nella finestra popup Input manuale. Per visualizzare un'anteprima della finestra popup Input manuale, fare clic su Testa input dell'utente. L'anteprima consente inoltre di verificare se la stringa di input è conforme alla regola di convalida dell'input (vedere i parametri seguenti). 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 - singola stringa; Elenco a discesa - il valore viene selezionato tra più opzioni dell'elenco a discesa. |
| Opzioni dell'elenco a discesa | Inserire i valori univoci per l'elenco a discesa dell'input dell'utente in un elenco delimitato da virgole. Per includere un'opzione vuota nell'elenco a discesa, aggiungere una virgola aggiuntiva all'inizio, al centro o alla fine dell'elenco. Questo campo viene visualizzato solo se Elenco a discesa è selezionato come Tipo di input. |
| Stringa di input predefinita | Inserire la stringa predefinita per l'input dell'utente (oppure nessuna). Questo campo verrà convalidato rispetto all'espressione regolare fornita nel campo Regola di convalida dell'input. Il valore inserito qui verrà visualizzato per impostazione predefinita nella finestra popup Input manuale. Questo campo viene visualizzato solo se Stringa è selezionato come Tipo di input. |
| Regola di convalida dell'input | Inserire un'espressione regolare per convalidare la stringa di input dell'utente. Sono supportate le espressioni regolari globali. Questo campo viene visualizzato solo se Stringa è selezionato come Tipo di input. |
| Abilita conferma | Selezionare la casella di controllo per visualizzare un messaggio di conferma prima dell'esecuzione dello script. Questa funzione può essere particolarmente utile per operazioni potenzialmente pericolose, come uno script di riavvio, o per operazioni che potrebbero richiedere molto tempo. |
| Testo di conferma | Inserire il testo personalizzato per la conferma nella finestra popup abilitata con la casella di controllo precedente (ad esempio, Il sistema remoto verrà riavviato. Continuare?). Per vedere come verrà visualizzato il testo, fare clic su Testa 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 manuale dell'utente sia un messaggio di conferma, verranno visualizzati in finestre popup consecutive.
Input manuale dell'utente
L'input manuale dell'utente consente di fornire un parametro personalizzato a ogni esecuzione dello script. In questo modo non è necessario creare più script utente simili che differiscono solo per un parametro.
Ad esempio, è possibile fornire allo script un numero intero diverso o un indirizzo URL diverso durante l'esecuzione.
Per abilitare l'input manuale dell'utente:
- utilizzare la macro {MANUALINPUT} nello script (comandi, script, parametro dello script) dove necessario; oppure nel campo URL degli script URL;
- nella configurazione avanzata dello script, abilitare l'input manuale dell'utente e configurare le opzioni di input.
Con l'input dell'utente abilitato, prima dell'esecuzione dello script verrà visualizzata una finestra popup Input manuale che chiederà all'utente di fornire un valore personalizzato. Il valore fornito sostituirà {MANUALINPUT} nello script.
A seconda della configurazione, all'utente verrà chiesto di inserire un valore stringa:

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

L'input manuale dell'utente è disponibile solo per gli script il cui ambito è "Azione manuale sull'host" o "Azione manuale sull'evento".
Esecuzione dello script e risultato
Gli script eseguiti dal server Zabbix 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 è un output standard:
- Se lo script termina correttamente (codice di uscita
0), il valore restituito è limitato a 16 MB (inclusi gli spazi bianchi finali, che vengono troncati). - Se lo script termina con un errore (codice di uscita diverso da zero), il valore restituito è un errore standard limitato a 2 KB.
Zabbix non memorizza per impostazione predefinita l'output esteso dello script. Per conservare tutti i dettagli dell'output, è possibile implementare la registrazione direttamente nello script (ad esempio, reindirizzando l'output a un file di log locale).
Si noti che per gli script eseguiti dal server Zabbix o dal proxy Zabbix si applicano anche i limiti del database.
Di seguito è riportato un esempio di script e della finestra dei risultati:
uname -v
/tmp/non_existing_script.sh
echo "This script was started by {USER.USERNAME}"

Il risultato dello script non visualizza lo script stesso.
Timeout dello script su Zabbix agent
Potresti riscontrare una situazione in cui si verifica un timeout durante l'esecuzione di uno script.
Di seguito è riportato un esempio di uno script in esecuzione su Zabbix agent e la relativa finestra dei risultati:
sleep 5
df -h

In questo caso, il messaggio di errore è 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.
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.
Timeout degli script sugli agent attivi
È possibile eseguire gli script solo sugli agent che operano in modalità attiva. Una volta che l'esecuzione dello script viene attivata da una operazione di un'azione o dall'esecuzione manuale dello script, il comando viene incluso nella configurazione dei controlli attivi ed eseguito non appena l'agent attivo lo riceve.
Gli script manuali vengono inviati all'agent attivo insieme al timeout del server/proxy per l'esecuzione dello script. Aumentare il timeout predefinito del server/proxy per l'esecuzione dello script. Il timeout deve essere superiore alla frequenza di aggiornamento dei controlli attivi, altrimenti il timeout viene superato prima che l'agent attivo riceva lo script e sia in grado di restituire il risultato.
Timeout dello script su Zabbix server/proxy
Di seguito è riportato un esempio di uno 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).