[comment]: # translation:outdated

[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]: # ({6b1da1a4-60e46db2})
::: notetip
Si consiglia di utilizzare le macro host invece delle macro globali, perché l'aggiunta, l'aggiornamento o l'eliminazione delle macro globali forza un aggiornamento incrementale della configurazione per tutti gli host. Per ulteriori informazioni, vedere [Controlli agent passivi e attivi](/manual/appendix/items/activepassive#active-checks).
:::

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

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

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

-   per le macro globali, vai su *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"}

|Parametro|Descrizione|
|--|--------|
|*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 è mascherato con asterischi<br> **[Vault secret](/manual/config/macros/secret_macros#vault-secret)** - il valore contiene un percorso/query a 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 utilizzato per fornire maggiori informazioni su questa macro.|

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

-   se le macro utente sono utilizzate in item o trigger di template, valuta di aggiungere tali macro anche al template stesso (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 macro segrete non vengono [esportati](/manual/xml_export_import))
-   se le macro utente sono utilizzate nelle espressioni dei 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, una chiave item, una funzione, un operatore o un'altra espressione di trigger (le macro segrete non possono essere utilizzate nelle espressioni dei trigger)
-   se le macro utente sono utilizzate su un host che dispone di una regola di low-level discovery con prototipi di host, gli [host rilevati](/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})
