1 Funzioni macro

Panoramica

Le funzioni macro offrono la possibilità di personalizzare i valori delle macro (ad esempio, abbreviare o estrarre sottostringhe specifiche), rendendoli più facili da utilizzare.

La sintassi di una funzione macro è:

{macro.func(params)}

dove

  • macro - la macro da personalizzare;
  • func - la funzione da applicare (vedere funzioni supportate);
  • params - un elenco di parametri della funzione separati da virgole, che devono essere racchiusi tra doppi apici se:
    • iniziano con uno spazio o con doppi apici;
    • contengono parentesi chiuse o una virgola.

Per esempio:

{{TIME}.fmttime(format,time_shift)}
{{ITEM.VALUE}.regsub(pattern, output)}
{{$USERMACRO}.regsub(pattern, output)}
{{#LLDMACRO}.regsub(pattern, output)}

Le funzioni macro sono supportate per

Le funzioni macro possono essere utilizzate in tutte le posizioni che supportano le macro elencate. Questo vale salvo nei casi in cui sia esplicitamente indicato che è prevista solo una macro (ad esempio, durante la configurazione delle macro host o dei filtri delle regole di low-level discovery).

È supportata una sola funzione per macro; non sono supportate più funzioni macro concatenate.

Consultare gli esempi di escaping per i casi in cui le funzioni macro vengono utilizzate all'interno di altri contesti (funzione, chiave item, un'altra macro, ecc.).

Funzioni supportate

Le funzioni sono elencate senza informazioni aggiuntive. Fare clic sulla funzione per visualizzare tutti i dettagli.

Function Description
btoa Codifica del valore della macro in codifica Base64.
fmtnum Formattazione dei numeri per controllare il numero di cifre visualizzate dopo il separatore decimale.
fmttime Formattazione dell'ora.
htmldecode Decodifica del valore della macro dalla codifica HTML.
htmlencode Codifica del valore della macro nella codifica HTML.
iregsub Estrazione di una sottostringa tramite corrispondenza con un'espressione regolare (senza distinzione tra maiuscole e minuscole).
lowercase Trasformazione dei caratteri del valore della macro in minuscolo.
regrepl Sostituzione di carattere/sottostringa nel valore della macro.
regsub Estrazione di una sottostringa tramite corrispondenza con un'espressione regolare (con distinzione tra maiuscole e minuscole).
tr Traslitterazione dei caratteri del valore della macro.
uppercase Trasformazione dei caratteri del valore della macro in maiuscolo.
urldecode Decodifica del valore della macro dalla codifica URL.
urlencode Codifica del valore della macro nella codifica URL.

Dettagli della funzione

I parametri opzionali della funzione sono indicati da < >.

btoa

Codifica di un valore macro in codifica Base64. La codifica Base64 è un metodo per rappresentare dati binari come testo, utile per l'archiviazione e la trasmissione sicura di contenuti binari tramite protocolli basati su testo.

Esempio:

{{ITEM.VALUE}.btoa()} - codificherà in Base64 un valore come "zabbix" in "emFiYml4"
fmtnum(digits)

Formattazione dei numeri per controllare il numero di cifre stampate dopo il separatore decimale.

Parametri:

  • digits - il numero di cifre dopo il separatore decimale. Intervallo valido: 0-20. Non verranno prodotti zeri finali.

Esempi:

{{ITEM.VALUE}.fmtnum(2)} - restituirà "24.35" da un valore ricevuto di "24.3483523"
{{ITEM.VALUE}.fmtnum(0)} - restituirà "24" da un valore ricevuto di "24.3483523"
fmttime(format,<time_shift>)

Formattazione dell'ora.
Si noti che questa funzione può essere utilizzata con macro che vengono risolte in un valore in uno dei seguenti formati temporali:

  • hh:mm:ss
  • yyyy-mm-ddThh:mm:ss[tz] (standard ISO8601)
  • timestamp UNIX

Parametri:

  • format - stringa di formato obbligatoria, compatibile con la formattazione della funzione strftime;
  • time_shift (opzionale) - lo spostamento temporale applicato all'ora prima della formattazione; deve iniziare con -<N><time_unit> o +<N><time_unit>, dove:
    • N - il numero di unità di tempo da aggiungere o sottrarre;
    • time_unit - h (ora), d (giorno), w (settimana), M (mese) oppure y (anno).

Commenti:

  • Il parametro time_shift supporta operazioni temporali in più passaggi e può includere /<time_unit> per spostarsi all'inizio dell'unità di tempo (/d - mezzanotte, /w - 1° giorno della settimana (lunedì), /M - 1° giorno del mese, ecc.). Esempi: -1w - esattamente 7 giorni indietro; -1w/w - lunedì della settimana precedente; -1w/w+1d - martedì della settimana precedente.
  • Le operazioni temporali vengono calcolate da sinistra a destra senza priorità. Ad esempio, -1M/d+1h/w verrà interpretato come ((-1M/d)+1h)/w.

Esempi:

{{TIME}.fmttime(%B)} - restituirà "October" da un valore ricevuto di "1633098961"
{{TIME}.fmttime(%d %B,-1M/M)} - restituirà "1 September" da un valore ricevuto di "1633098961"
htmldecode

Decodifica di un valore macro dalla codifica HTML.

Sono supportati i seguenti caratteri:

Valore Valore decodificato
&amp; &
&lt; <
&gt; >
&quot; "
&#039; '
&#39; '

Esempio:

{{ITEM.VALUE}.htmldecode()} - decodificherà in HTML un valore come "&lt;" in "<"
htmlencode

Codifica di un valore macro nella codifica HTML.

Sono supportati i seguenti caratteri:

Valore Valore codificato
& &amp;
< &lt;
> &gt;
" &quot;
' &#39;

Esempio:

{{ITEM.VALUE}.htmlencode()} - codificherà in HTML un carattere come "<" in "&lt;"
iregsub(pattern,output)

Estrazione di una sottostringa tramite corrispondenza con un'espressione regolare (senza distinzione tra maiuscole e minuscole).

Parametri:

  • pattern - l'espressione regolare da confrontare;
  • output - le opzioni di output. I segnaposto \1 - \9 sono supportati per i gruppi di cattura. \0 restituisce il testo corrispondente.

Commenti:

  • Se non vi è alcuna corrispondenza per l'espressione regolare, la funzione restituisce una stringa vuota.
  • Se il pattern della funzione è un'espressione regolare non valida, allora la macro viene valutata come 'UNKNOWN' (tranne per le macro di low-level discovery, nel qual caso la funzione verrà ignorata e la macro rimarrà irrisolta).
  • I riferimenti a gruppi di cattura inesistenti nella stringa di sostituzione vengono sostituiti con una stringa vuota.

Esempio:

{{ITEM.VALUE}.iregsub("fail|error|fault|problem","ERROR")} - verrà risolta in "ERROR" se vengono ricevute le sottostringhe "fail", "error", "fault" o "problem" (senza distinzione tra maiuscole e minuscole); restituirà una stringa vuota se non vi è alcuna corrispondenza
minuscolo

Trasformazione di tutti i caratteri del valore della macro in minuscolo.
Funziona con set di caratteri a byte singolo (come ASCII) e non supporta UTF-8.

Esempio:

{{ITEM.VALUE}.lowercase()} - trasformerà un valore come "Zabbix SERVER" in "zabbix server" (minuscolo)
regrepl(pattern,replacement,<pattern2>,<replacement2>,...)

Sostituzione di caratteri/sottostringhe nel valore della macro.

Parametri:

  • pattern - l'espressione regolare da corrispondere;
  • replacement - la stringa di sostituzione. I segnaposto \1 - \9 sono supportati nelle stringhe di sostituzione per i gruppi catturati.

Commenti:

  • I pattern e le sostituzioni vengono elaborati in sequenza, con ogni coppia successiva applicata in base al risultato della sostituzione precedente;
  • I riferimenti a gruppi di cattura inesistenti nella stringa di sostituzione vengono sostituiti con una stringa vuota.

Esempi:

{{ITEM.VALUE}.regrepl("oldParam", "newParam")} - sostituirà "oldParam" con "newParam"
{{ITEM.VALUE}.regrepl("([^a-z])","\\\1")} - tutti i caratteri non alfabetici verranno preceduti da una barra rovesciata di escape
{$THRESHOLD:"{{#FSNAME}.regrepl(\"\\$\",\"\")}"} - rimuoverà una barra rovesciata finale (ad esempio, per sostituire "C:\" con "C:")
{{ITEM.VALUE}.regrepl("_v1\.0", "_v2.0", "\(final\)", "")} - sostituirà più parti nel valore dell'item
regsub(pattern,output)

Estrazione di sottostringhe tramite una corrispondenza con espressione regolare (con distinzione tra maiuscole e minuscole).

Parametri:

  • pattern - l'espressione regolare da confrontare;
  • output - le opzioni di output. I segnaposto \1 - \9 sono supportati per i gruppi di cattura. \0 restituisce il testo corrispondente.

Commenti:

  • Se non vi è alcuna corrispondenza per l'espressione regolare, la funzione restituisce una stringa vuota.
  • Se il pattern della funzione è un'espressione regolare non corretta, allora la macro viene valutata come 'UNKNOWN' (tranne per le macro di low-level discovery, nel qual caso la funzione verrà ignorata e la macro rimarrà irrisolta).
  • I riferimenti a gruppi di cattura inesistenti nella stringa di sostituzione vengono sostituiti con una stringa vuota.

Esempi:

{{ITEM.VALUE}.regsub("^([0-9]+)", Problem ID: \1)} - verrà risolto in "Problem ID: 123" se viene ricevuto un valore come "123 Log line"
{{ITEM.VALUE}.regsub("fail|error|fault|problem","ERROR")} - verrà risolto in "ERROR" se vengono ricevute le sottostringhe "fail", "error", "fault" o "problem" (con distinzione tra maiuscole e minuscole); restituirà una stringa vuota se non vi è alcuna corrispondenza

Vedi altri esempi.

tr(characters,replacement)

Traslitterazione dei caratteri del valore della macro.

  • characters - l'insieme dei caratteri da sostituire;
  • replacement - l'insieme dei caratteri sostitutivi corrispondenti per posizione.

Esempi:

{{ITEM.VALUE}.tr(abc, xyz)} - sostituirà tutte le occorrenze di "a" con "x", "b" con "y", "c" con "z"
{{ITEM.VALUE}.tr(abc, xyzq)} - sostituirà tutte le occorrenze di "a" con "x", "b" con "y", "c" con "z" ("q" viene ignorato)
{{ITEM.VALUE}.tr(abcde, xyz)} - sostituirà tutte le occorrenze di "a" con "x", "b" con "y", "c" con "z", "d" con "z", "e" con "z" (cioè xyzzz)
{{ITEM.VALUE}.tr("\\\'", "\/\"")} - sostituirà tutte le occorrenze della barra rovesciata con la barra, e gli apici singoli con i doppi apici
{{ITEM.VALUE}.tr(A-Z,a-z)} - convertirà tutte le lettere in minuscolo
{{ITEM.VALUE}.tr(0-9a-z,*)} - sostituirà tutti i numeri e le lettere minuscole con "*"
{{ITEM.VALUE}.tr(0-9,ab)} - sostituirà tutte le occorrenze di 0 con "a" e tutte le occorrenze di 1, 2, 3, 4, 5, 6, 7, 8 e 9 con "b"
{{ITEM.VALUE}.tr(0-9abcA-L,*)} - sostituirà tutti i numeri, i caratteri "abc" e l'intervallo A-L con "*"
{{ITEM.VALUE}.tr("\n","*")} - sostituirà le occorrenze di fine riga con *
{{ITEM.VALUE}.tr("e", "\n")} - sostituirà tutte le "e" con un fine riga

Per includere caratteri letterali:

barra rovesciata - deve essere preceduta da escape come \\
apice singolo - deve essere preceduto da escape come \'
doppio apice - deve essere preceduto da escape come \"

Sequenze di escape supportate con barra rovesciata:

\\\\ => \\ - doppia barra rovesciata in barra rovesciata singola
\\a  => \a - avviso
\\b  => \b - backspace
\\f  => \f - avanzamento pagina
\\n  => \n - nuova riga
\\r  => \r - ritorno carrello
\\t  => \t - tabulazione orizzontale
\\v  => \v - tabulazione verticale
maiuscolo

Trasformazione di tutti i caratteri del valore della macro in maiuscolo.
Funziona con set di caratteri a byte singolo (come ASCII) e non supporta UTF-8.

Esempio:

{{ITEM.VALUE}.uppercase()} - trasformerà un valore come "Zabbix Server" in "ZABBIX SERVER" (maiuscolo)
urldecode

Decodifica di un valore macro dalla codifica URL.

Esempio:

{{ITEM.VALUE}.urldecode()} - decodificherà tramite URL un valore come "%2F" in "/"
urlencode

Codifica di un valore macro nel formato URL encoding.

Esempio:

{{ITEM.VALUE}.urlencode()} - codificherà in URL un carattere come "/" in "%2F"

Esempi aggiuntivi

La tabella seguente mostra altri esempi di utilizzo delle funzioni macro.

:::noteinfo {#IFALIAS} è una macro LLD ed è definita solo nei contesti di low-level discovery (regole di discovery, prototipi e item/trigger creati da essi). Se utilizzata al di fuori di LLD, il token rimarrà non espanso. :::

Funzione macro Valore ricevuto Output
{{ITEM.VALUE}.regsub(^[0-9]+, Problem)} 123Log line Problem
{{ITEM.VALUE}.regsub("^([0-9]+)", "Problem")} 123 Log line Problem
{{ITEM.VALUE}.regsub(".*", "Problem ID: \1")} Log line Problem ID:
{{ITEM.VALUE}.regsub("^(\w+).*?([0-9]+)", " Problem ID: \1_\2 ")} MySQL crashed errno 123 Problem ID: MySQL_123 
{{ITEM.VALUE}.regsub("([1-9]+", "Problem ID: \1")} 123 Log line *UNKNOWN* (espressione regolare non valida)
{{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)} customername_1 customername
{{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)} customername_1 1
{{#IFALIAS}.regsub("(.*)_([0-9]+", \1)} customername_1 {{#IFALIAS}.regsub("(.*)_([0-9]+", \1)} (espressione regolare non valida)
{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \1)}"} customername_1 {$MACRO:"customername"}
{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \2)}"} customername_1 {$MACRO:"1"}
{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"} customername_1 {$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"} (espressione regolare non valida)
"{$MACRO:"\{{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)}\"}" customername_1 "{$MACRO:"\customername\"}"
"{$MACRO:"\{{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)}\"}" customername_1 "{$MACRO:"\1\"}"
"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}" customername_1 "{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}" (espressione regolare non valida)
Visualizzazione dei valori completi degli item

I valori lunghi delle macro risolte {ITEM.VALUE} e {ITEM.LASTVALUE} per gli item di tipo testo/log vengono troncati a 20 caratteri in alcune posizioni del frontend. Per visualizzare i valori completi di queste macro è possibile utilizzare le funzioni macro, ad esempio:

{{ITEM.VALUE}.regsub("(.*)", \1)}
{{ITEM.LASTVALUE}.regsub("(.*)", \1)}

Vedi anche: dettagli delle macro {ITEM.VALUE} e {ITEM.LASTVALUE} macro details.