3 Script
Panoramica
Nella sezione Alerts > Scripts è possibile configurare e gestire gli script globali definiti dall'utente.
Gli script globali, a seconda dell'ambito configurato e anche dei permessi dell'utente, sono disponibili per l'esecuzione:
- dal menu host in varie posizioni del frontend (Dashboard, Problems, Latest data, Maps, ecc.)
- dal menu evento
- possono essere eseguiti come operazione di un'azione
Gli script vengono eseguiti su Zabbix agent, Zabbix server (proxy) o solo su Zabbix server Vedi anche Command execution.
Sia su Zabbix agent sia 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 ogni comando consentito nella configurazione dell'agent, * 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. Se tuttavia è necessario eseguire comandi remoti su Zabbix proxy, impostare il parametro EnableRemoteCommands su '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, 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:
| 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 su host o azione manuale su 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 ha i 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 | Indica se lo script verrà 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 di utenti a cui lo script è disponibile (oppure All per tutti i gruppi di utenti). |
| Host group | Viene visualizzato il gruppo di host per cui lo script è disponibile (oppure All per tutti i gruppi di host). |
| Host access | Viene visualizzato il livello di autorizzazione per il gruppo di host - Read o Write. Solo gli utenti con il livello di autorizzazione richiesto avranno accesso all'esecuzione dello script. |
Per configurare un nuovo script, fare clic sul pulsante Create script nell'angolo in alto a destra.
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 le macro non risolte.
Il link Filter è disponibile sopra l'elenco degli script. Se lo si fa clic, diventa disponibile un filtro in cui è possibile filtrare gli script per nome e ambito.

Configurazione di uno script globale

Si consiglia di usare le funzioni macro invece delle macro semplici negli script globali per migliorare la sicurezza, poiché le macro non vengono automaticamente escape.
Attributi dello script:
| Parametro | Descrizione | |
|---|---|---|
| Nome | Nome univoco dello script. Ad es. Clear /tmp filesystem |
|
| Ambito | Ambito dello script - operazione di action, action manuale su host o action manuale su evento. Questa impostazione determina dove lo script può essere usato - nei comandi remoti delle operazioni di action, dal menu host o dal menu evento rispettivamente. Impostare l'ambito su 'Action operation' rende lo script disponibile per tutti gli utenti con accesso a Alerts > Actions. Se uno script è effettivamente usato in un action, il suo ambito non può più essere modificato in modo diverso da 'action operation'. Supporto macro L'ambito influisce sull'insieme delle 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 action vengono eseguite automaticamente. La macro {MANUALINPUT} consente di specificare un input manuale al momento dell'esecuzione dello script. È supportata per gli script di action manuale su host e di action manuale su evento. Per scoprire quali altre macro sono supportate, cercare 'Trigger-based notifications and commands/Trigger-based commands', 'Manual host action scripts' e 'Manual event action scripts' nella tabella supported macro. Si noti che, se una macro può risolversi in un valore con spazi (ad esempio, il nome dell'host), non dimenticare di racchiuderla tra virgolette, se necessario. |
|
| Percorso menu | Il percorso di menu desiderato per lo script. Ad esempio, Default o Default/ visualizzerà lo script nella rispettiva directory. I menu possono essere annidati, 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 indicate.Questo campo viene visualizzato solo se come Ambito è selezionato 'Manual host action' o 'Manual event action'. |
|
| Tipo | Fare clic sul rispettivo pulsante per selezionare il tipo di script: comando URL, Webhook, Script, SSH, Telnet o IPMI. Il tipo URL è disponibile solo quando come Ambito è selezionato 'Manual host action' o 'Manual event action'. |
|
| Tipo di script: URL | ||
| URL | Specificare l'URL per l'accesso rapido dal menu host o dal menu evento. Sono supportate macro e user macro personalizzate. Il supporto delle macro dipende dall'ambito dello script (vedere Ambito sopra). Usare 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 in URL. |
|
| Apri in una nuova finestra | Determina se l'URL deve essere aperto in una nuova scheda del browser o nella stessa. | |
| Tipo di script: Webhook | ||
| Parametri | Specificare le variabili del webhook come coppie attributo-valore. Vedere anche la configurazione del media Webhook. Sono supportate macro e user macro personalizzate nei valori dei parametri. 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 ad esso. Il supporto delle macro dipende dall'ambito dello script (vedere Ambito sopra). Vedere anche la configurazione del media Webhook, Additional Javascript objects. |
|
| Timeout | Timeout di esecuzione di JavaScript (1-60s, predefinito 30s). Sono supportati i suffissi di tempo, ad es. 30s, 1m. |
|
| Tipo di script: Script | ||
| Esegui su | Fare clic sul rispettivo pulsante 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 da proxy o 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 all'interno dello script. Il supporto delle macro dipende dall'ambito dello script (vedere Ambito sopra). Sono supportate user macro 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 è selezionata 'Password'. |
|
| File della chiave pubblica | Inserire il percorso del file della chiave pubblica. Questo campo è disponibile se come metodo di autenticazione è selezionata 'Public key'. |
|
| File della chiave privata | Inserire il percorso del file della chiave privata. Questo campo è disponibile se come metodo di autenticazione è selezionata 'Public key'. |
|
| Passphrase | Inserire la passphrase. Questo campo è disponibile se come metodo di autenticazione è selezionata 'Public key'. |
|
| 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 user macro 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 user macro personalizzate. |
|
| Tipo di script: IPMI | ||
| Comando | Inserire il comando IPMI. Il supporto delle macro dipende dall'ambito dello script (vedere Ambito sopra). Sono supportate user macro personalizzate. |
|
| Descrizione | Inserire una descrizione per lo script. | |
| Gruppo host | Selezionare il gruppo host per cui lo script sarà disponibile (oppure All per tutti i gruppi host). | |
| Gruppo utenti | Selezionare il gruppo utenti a cui lo script sarà disponibile (oppure All per tutti i gruppi utenti). Questo campo viene visualizzato solo se come Ambito è selezionato 'Manual host action' o 'Manual event action'. |
|
| Permessi host richiesti | Selezionare 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 Ambito è selezionato 'Manual host action' o 'Manual event action'. |
|
| Configurazione avanzata | Fare clic sull'intestazione Configurazione avanzata per visualizzare le opzioni di configurazione avanzata. Questo campo viene visualizzato solo se come Ambito è selezionato 'Manual host action' o 'Manual event action'. |
|
Configurazione avanzata
Le opzioni di configurazione avanzata sono disponibili nella sezione comprimibile Configurazione avanzata:

| Parameter | Description |
|---|---|
| Enable user input | Seleziona 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. Vedi anche: Input manuale dell'utente. |
| Input prompt | Immetti un testo personalizzato che richieda un input personalizzato dell'utente. Questo testo verrà visualizzato sopra il campo di input nel popup Input manuale. Per visualizzare un'anteprima del popup Input manuale, fai clic su Test user input. L'anteprima consente anche di verificare se la stringa di input è conforme alla regola di convalida dell'input (vedi i parametri sotto). Il supporto per macro e macro utente dipende dall'ambito dello script (vedi Scope nei parametri generali di configurazione dello script). |
| Input type | Seleziona il tipo di input manuale: String - stringa singola; Dropdown - il valore viene selezionato tra più opzioni a discesa. |
| Dropdown options | Immetti valori univoci per il menu a discesa dell'input utente in un elenco separato da virgole. Per includere un'opzione vuota nel menu a discesa, aggiungi una virgola extra all'inizio, al centro o alla fine dell'elenco. Questo campo viene visualizzato solo se è selezionato 'Dropdown' come Input type. |
| Default input string | Immetti la stringa predefinita per l'input utente (oppure nessuna). Questo campo verrà convalidato in base all'espressione regolare fornita nel campo Input validation rule. Il valore immesso qui verrà visualizzato per impostazione predefinita nel popup Input manuale. Questo campo viene visualizzato solo se è selezionato 'String' come Input type. |
| Input validation rule | Immetti un'espressione regolare per convalidare la stringa di input dell'utente. Le espressioni regolari globali sono supportate. Questo campo viene visualizzato solo se è selezionato 'String' come Input type. |
| Enable confirmation | Seleziona 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 che potrebbero richiedere molto tempo. |
| Confirmation text | Immetti un testo di conferma personalizzato per il popup di conferma abilitato con la casella di controllo sopra (ad esempio, Il sistema remoto verrà riavviato. Sei sicuro?). Per vedere come apparirà il testo, fai clic su Test confirmation accanto al campo. Macro e macro utente personalizzate sono supportate. Nota: le macro non verranno espanse durante il test del messaggio di conferma. |
Se sia l'input manuale dell'utente sia un messaggio di conferma sono configurati, 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 su Zabbix agent
Potresti incontrare una situazione in cui si verifica un timeout durante l'esecuzione di uno script.
Vedi un esempio di uno script in esecuzione su Zabbix agent e la finestra del risultato qui sotto:
sleep 5
df -h

Il messaggio di errore, in questo caso, è il seguente:
Timeout while executing a shell script.
Per evitare situazioni di questo tipo, 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 dello script sugli agent attivi
È possibile eseguire script solo sugli agent in modalità attiva. Una volta che l'esecuzione dello script viene avviata dall'operazione dell'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 di server/proxy per l'esecuzione dello script. Aumentare il timeout predefinito di 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 possa restituire il risultato.
Timeout dello script su Zabbix server/proxy
Vedere un esempio di uno script in esecuzione su Zabbix server e la finestra del risultato qui sotto:
sleep 11
df -h

Si consiglia inoltre di ottimizzare lo script stesso (anziché modificare il parametro TrapperTimeout impostandolo a un valore corrispondente (nel nostro caso, > 11) modificando la configurazione di Zabbix server).