3 Macro utente con contesto

Panoramica

È possibile utilizzare un contesto opzionale nelle macro utente, che consente di sovrascrivere il valore predefinito con uno specifico del contesto.

Il contesto viene aggiunto al nome della macro; la sintassi dipende dal fatto che il contesto sia un valore di testo statico:

{$MACRO:"testo statico"}

oppure un'espressione regolare:

{$MACRO:regex:"espressione regolare"} 

Si noti che una macro con contesto di espressione regolare può essere definita solo nella configurazione delle macro utente. Se il prefisso regex: viene utilizzato altrove come contesto della macro utente, ad esempio in un'espressione di trigger, verrà trattato come contesto statico.

Le virgolette del contesto sono facoltative (vedere anche le note importanti).

Esempi di contesto della macro:

Esempio Descrizione
{$LOW_SPACE_LIMIT} Macro utente senza contesto.
{$LOW_SPACE_LIMIT:/tmp} Macro utente con contesto (stringa statica).
{$LOW_SPACE_LIMIT:regex:"^/tmp$"} Macro utente con contesto (espressione regolare). Equivale a {$LOW_SPACE_LIMIT:/tmp}.
{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"} Macro utente con contesto (espressione regolare). Corrisponde a tutte le stringhe con prefisso /var/log/.

Casi d'uso

Le macro utente con contesto possono essere definite per ottenere soglie più flessibili nelle espressioni dei trigger (in base ai valori recuperati dal low-level discovery). Ad esempio, è possibile definire le seguenti macro:

  • {$LOW_SPACE_LIMIT} = 10
  • {$LOW_SPACE_LIMIT:/home} = 20
  • {$LOW_SPACE_LIMIT:regex:"\^/[a-z]+$"} = 30

Quindi una macro di low-level discovery può essere utilizzata come contesto macro in un prototipo di trigger per il rilevamento dei file system montati:

last(/host/vfs.fs.size[{#FSNAME},pfree])<{$LOW_SPACE_LIMIT:"{#FSNAME}"}

Dopo il rilevamento, nei trigger verranno applicate soglie di spazio libero differenti a seconda dei punti di mount o dei tipi di file system rilevati. Gli eventi di problema verranno generati se:

  • la cartella /home ha meno del 20% di spazio libero su disco
  • le cartelle che corrispondono al pattern regexp (come /etc, /tmp o /var) hanno meno del 30% di spazio libero su disco
  • le cartelle che non corrispondono al pattern regexp e non sono /home hanno meno del 10% di spazio libero su disco

Note importanti

  • Se esiste più di una macro utente con contesto, Zabbix proverà prima a far corrispondere le macro con contesto semplice e poi le macro con contesto basato su espressioni regolari in un ordine non definito.

Non creare macro di contesto diverse che corrispondano alla stessa stringa, per evitare un comportamento non definito.

  • Se una macro con il relativo contesto non viene trovata su host, nei template collegati o a livello globale, allora viene cercata la macro senza contesto.
  • Nel contesto sono supportate solo le macro di low-level discovery. Qualsiasi altra macro viene ignorata e trattata come testo normale.

Tecnicamente, il contesto della macro viene specificato usando regole simili ai parametri della chiave item, tranne per il fatto che il contesto della macro non viene analizzato come più parametri se è presente un carattere ,:

  • Il contesto della macro deve essere racchiuso tra virgolette " se il contesto contiene un carattere } o inizia con un carattere ". Le virgolette all'interno di un contesto tra virgolette devono essere precedute dal carattere di escape \.
  • Il carattere \ stesso non viene sottoposto a escape, il che significa che è impossibile avere un contesto tra virgolette che termini con il carattere \ - la macro {$MACRO:"a:\b\c\"} non è valida.
  • Gli spazi iniziali nel contesto vengono ignorati, quelli finali no:
    • Ad esempio {$MACRO:A} è uguale a {$MACRO: A}, ma non a {$MACRO:A }.
  • Tutti gli spazi prima delle virgolette iniziali e dopo quelle finali vengono ignorati, ma tutti gli spazi all'interno delle virgolette no:
    • Le macro {$MACRO:"A"}, {$MACRO: "A"}, {$MACRO:"A" } e {$MACRO: "A" } sono uguali, ma le macro {$MACRO:"A"} e {$MACRO:" A "} non lo sono.

Le seguenti macro sono tutte equivalenti, perché hanno lo stesso contesto: {$MACRO:A}, {$MACRO: A} e {$MACRO:"A"}. Questo è in contrasto con le chiavi item, dove 'key[a]', 'key[ a]' e 'key["a"]' hanno lo stesso significato semantico, ma sono diverse ai fini dell'univocità.