[comment]: # ({d30dc182-d30dc182})
# 2 Macro utente

[comment]: # ({/d30dc182-d30dc182})

[comment]: # ({c282a934-3e220640})
#### Panoramica

Le macro utente sono supportate in Zabbix per una maggiore flessibilità, oltre alle macro [supportate](/manual/appendix/macros/supported_by_location) disponibili out-of-the-box.

Le macro utente possono essere definite a livello globale, di template e di host. Queste macro hanno una sintassi speciale:

    {$MACRO}

Zabbix risolve le macro secondo il seguente ordine di precedenza:

1. macro a livello di host (controllate per prime)
2. macro definite per i template di primo livello dell'host (cioè i template collegati direttamente all'host), ordinate per ID del template
3. macro definite per i template di secondo livello dell'host, ordinate per ID del template
4. macro definite per i template di terzo livello dell'host, ordinate per ID del template, e così via
5. macro globali (controllate per ultime)

In altre parole, se una macro non esiste per un host, Zabbix proverà a trovarla nei template dell'host con profondità crescente. Se ancora non viene trovata, verrà utilizzata una macro globale, se esiste.

::: notewarning
Se una macro con lo **stesso nome** esiste in più template collegati dello stesso livello, verrà utilizzata la macro del template con l'ID più basso. Pertanto, avere macro con lo stesso nome in più template rappresenta un rischio di configurazione.
:::

Se Zabbix non è in grado di trovare una macro, la macro non verrà risolta.

::: noteimportant
Le macro (incluse le macro utente) vengono lasciate non risolte nella sezione Configuration (ad esempio, nell'elenco dei trigger) per scelta progettuale, così da rendere più trasparente la configurazione complessa.
:::

Le macro utente possono essere utilizzate in:

- nome item
- parametro della chiave item
- intervalli di aggiornamento item e intervalli flessibili
- nome e descrizione del trigger
- parametri e costanti dell'espressione del trigger (vedere gli [esempi](#examples))
- molte altre posizioni - vedere l'[elenco completo](/manual/appendix/macros/supported_by_location_user)

[comment]: # ({/c282a934-3e220640})

[comment]: # ({e3755145-e3755145})
##### Casi d'uso comuni delle macro globali e del host

-   utilizzare una macro globale in più posizioni; quindi modificare il valore della macro
    e applicare le modifiche di configurazione a tutte le posizioni con un clic
-   sfruttare i template con attributi specifici del host:
    password, numeri di porta, nomi di file, espressioni regolari, ecc.

[comment]: # ({/e3755145-e3755145})

[comment]: # ({be6c0958-60e46db2})
::: notetip
Si consiglia di usare le macro dell'host invece delle macro globali, perché l'aggiunta, l'aggiornamento o l'eliminazione delle macro globali impone un aggiornamento incrementale della configurazione per tutti gli host. Per ulteriori informazioni, vedere [Passive and active agent checks](/manual/appendix/items/activepassive#active-checks).
:::

[comment]: # ({/be6c0958-60e46db2})

[comment]: # ({808a388a-561314a3})
#### Configurazione

Per definire macro utente, vai alla posizione corrispondente nel frontend:

-   per le macro globali, visita *Administration → Macros*
-   per le macro a livello di host e template, apri le proprietà dell'host o del template
    e cerca la scheda *Macros*

Una macro utente ha i seguenti attributi:

![](../../../../assets/en/manual/config/macros/user_macros.png){width="600"}

|Parameter|Description|
|--|--------|
|*Macro*|Nome della macro. Il nome deve essere racchiuso tra parentesi graffe e iniziare con il simbolo del dollaro.<br>Esempio: {$FRONTEND\_URL}. Nei nomi delle macro sono consentiti i seguenti caratteri: **A-Z** (solo maiuscole), **0-9**, **\_**, **.**|
|*Value*|Valore della macro. Sono supportati tre tipi di valore:<br>**Text** (predefinito) - valore in testo semplice<br>**[Secret text](/manual/config/macros/secret_macros#secret-text)** - il valore viene mascherato con asterischi<br> **[Vault secret](/manual/config/macros/secret_macros#vault-secret)** - il valore contiene un percorso/query verso un [vault secret](/manual/config/secrets). <br><br>Per cambiare il tipo di valore, fai clic sul pulsante alla fine del campo di input del valore.<br><br>La lunghezza massima del valore di una macro utente è di 2048 caratteri.|
|*Description*|Campo di testo usato per fornire ulteriori informazioni su questa macro.|

Quando configuri le macro utente, **nota** i seguenti comportamenti specifici del contesto:

-   se le macro utente vengono usate negli item o nei trigger del template, considera di aggiungere tali macro anche al template (anche se sono definite globalmente); in questo modo, le macro di tipo *Text* funzioneranno come previsto dopo l'esportazione del template in XML e l'importazione in un altro sistema (i valori delle secret macro non vengono [esportati](/manual/xml_export_import))
-   se le macro utente vengono usate nelle espressioni di trigger, tali macro verranno risolte solo se fanno riferimento a un parametro o a una costante; NON verranno risolte se fanno riferimento a un host, a una chiave item, a una funzione, a un operatore o a un'altra espressione di trigger (le secret macro non possono essere usate nelle espressioni di trigger)
-   se le macro utente vengono usate su un host che ha una regola di discovery a basso livello con host prototype, gli [host scoperti](/manual/discovery/low_level_discovery/host_prototypes#discovered-hosts) erediteranno tutte le macro utente definite su quell'host

[comment]: # ({/808a388a-561314a3})

[comment]: # ({4c860844-4c860844})
#### Esempi

[comment]: # ({/4c860844-4c860844})

[comment]: # ({b9cf8f56-b9cf8f56})
##### Esempio 1

Uso della macro a livello di host nella chiave item "Status of SSH daemon":

`net.tcp.service[ssh,,{$SSH_PORT}]`

Questo item può essere assegnato a più host, a condizione che il valore di
**{$SSH\_PORT}** sia definito su tali host.

[comment]: # ({/b9cf8f56-b9cf8f56})

[comment]: # ({0fa7cf4a-0fa7cf4a})
##### Esempio 2

Uso di una macro a livello di host nel trigger "CPU load is too high":

`last(/ca_001/system.cpu.load[,avg1])>{$MAX_CPULOAD}`

Un trigger di questo tipo verrebbe creato nel template, non modificato nei
singoli host.

::: notetip
Se si desidera usare il numero di valori come parametro della funzione
(ad esempio, **max(/host/key,\#3)**), includere il simbolo cancelletto nella
definizione della macro in questo modo: SOME\_PERIOD => \#3
:::

[comment]: # ({/0fa7cf4a-0fa7cf4a})

[comment]: # ({36dc94ca-36dc94ca})
##### Esempio 3

Uso di due macro nel trigger "CPU load is too high":

`min(/ca_001/system.cpu.load[,avg1],{$CPULOAD_PERIOD})>{$MAX_CPULOAD}`

Si noti che una macro può essere utilizzata come parametro di una funzione del trigger, in
questo esempio la funzione **min()**.

[comment]: # ({/36dc94ca-36dc94ca})

[comment]: # ({0dabfae5-0dabfae5})
##### Esempio 4

Sincronizzare la condizione di indisponibilità dell'agent con l'intervallo
di aggiornamento dell'item:

-   definire la macro {$INTERVAL} e utilizzarla nell'intervallo di aggiornamento dell'item;
-   utilizzare {$INTERVAL} come parametro del trigger di indisponibilità dell'agent:

`nodata(/ca_001/agent.ping,{$INTERVAL})=1`

[comment]: # ({/0dabfae5-0dabfae5})

[comment]: # ({2d346656-0f8052f1})
##### Esempio 5

Centralizzare la configurazione dell'orario di lavoro:

-   creare una macro globale {$WORKING\_HOURS} uguale a `1-5,09:00-18:00`;
-   usarla nel campo *Working time* in *Administration* → *General* →
    *GUI*;
-   usarla nel campo *When active* in *Users* → *Users*, scheda *Media* di un utente;
-   usarla per impostare un polling degli item più frequente durante l'orario di lavoro:

![](../../../../assets/en/manual/config/macros/usermacro_example5.png)

-   usarla nella condizione dell'azione *Time period*;
-   modificare l'orario di lavoro in *Administration* → *Macros*,
    se necessario.

[comment]: # ({/2d346656-0f8052f1})

[comment]: # ({3c2ac944-3c2ac944})
##### Esempio 6

Utilizzare la macro del prototipo di host per configurare gli item per gli host rilevati:

-   in un prototipo di host definire la macro utente {$SNMPVALUE} con
    la macro di [low-level
    discovery](/manual/config/macros/lld_macros) {\#SNMPVALUE} come valore:

![](../../../../assets/en/manual/config/macros/usermacro_example6.png)

-   assegnare il template *Generic SNMPv2* al prototipo di host;
-   utilizzare {$SNMPVALUE} nel campo *SNMP OID* degli item del template *Generic SNMPv2*.

[comment]: # ({/3c2ac944-3c2ac944})

[comment]: # ({44ca625a-44ca625a})
#### Contesto macro utente

Vedi [macro utente con
contesto](/manual/config/macros/user_macros_context).

[comment]: # ({/44ca625a-44ca625a})
