1 Makrofunktionen
Übersicht
Makrofunktionen bieten die Möglichkeit, Werte von Makros anzupassen (zum Beispiel bestimmte Teilzeichenfolgen zu kürzen oder zu extrahieren), sodass sie sich leichter verwenden lassen.
Die Syntax einer Makrofunktion lautet:
{macro.func(params)}
wobei
- macro - das anzupassende Makro;
- func - die anzuwendende Funktion (siehe unterstützte Funktionen);
- params - eine durch Kommas getrennte Liste von Funktionsparametern, die in doppelte Anführungszeichen gesetzt werden müssen, wenn sie:
- mit einem Leerzeichen oder doppelten Anführungszeichen beginnen;
- schließende Klammern oder ein Komma enthalten.
Zum Beispiel:
{{TIME}.fmttime(format,time_shift)}
{{ITEM.VALUE}.regsub(pattern, output)}
{{$USERMACRO}.regsub(pattern, output)}
{{#LLDMACRO}.regsub(pattern, output)}
Makrofunktionen werden unterstützt für
Makrofunktionen können an allen Stellen verwendet werden, die die aufgeführten Makros unterstützen. Dies gilt, sofern nicht ausdrücklich angegeben ist, dass nur ein Makro erwartet wird (zum Beispiel bei der Konfiguration von Host-Makros oder Filtern von Low-level-discovery-Regeln).
Pro Makro wird nur eine einzelne Funktion unterstützt; mehrere verkettete Makrofunktionen werden nicht unterstützt.
Bitte beachten Sie die Escaping-Beispiele für Fälle, in denen Makrofunktionen in anderen Kontexten verwendet werden (Funktion, Datenpunktschlüssel, anderes Makro usw.).
Unterstützte Funktionen
Die Funktionen sind ohne zusätzliche Informationen aufgelistet. Klicken Sie auf die Funktion, um die vollständigen Details anzuzeigen.
| Funktion | Beschreibung |
|---|---|
| btoa | Kodierung des Makrowerts in Base64-Kodierung. |
| fmtnum | Zahlenformatierung zur Steuerung der Anzahl der nach dem Dezimalpunkt ausgegebenen Ziffern. |
| fmttime | Zeitformatierung. |
| htmldecode | Dekodierung des Makrowerts aus der HTML-Kodierung. |
| htmlencode | Kodierung des Makrowerts in HTML-Kodierung. |
| iregsub | Extraktion einer Teilzeichenfolge anhand einer Übereinstimmung mit einem regulären Ausdruck (Groß-/Kleinschreibung wird nicht beachtet). |
| lowercase | Umwandlung der Zeichen des Makrowerts in Kleinbuchstaben. |
| regrepl | Ersetzung eines Zeichens/einer Teilzeichenfolge im Makrowert. |
| regsub | Extraktion einer Teilzeichenfolge anhand einer Übereinstimmung mit einem regulären Ausdruck (Groß-/Kleinschreibung wird beachtet). |
| tr | Transliteration der Zeichen des Makrowerts. |
| uppercase | Umwandlung der Zeichen des Makrowerts in Großbuchstaben. |
| urldecode | Dekodierung des Makrowerts aus der URL-Kodierung. |
| urlencode | Kodierung des Makrowerts in URL-Kodierung. |
Funktionsdetails
Optionale Funktionsparameter werden durch < > angegeben.
btoa
Kodierung eines Makrowerts in die Base64-Kodierung. Die Base64-Kodierung ist eine Methode zur Darstellung von Binärdaten als Text und ist nützlich für die Speicherung sowie die sichere Übertragung binärer Inhalte über textbasierte Protokolle.
Beispiel:
{{ITEM.VALUE}.btoa()} - kodiert einen Wert wie "zabbix" in Base64 zu "emFiYml4"
fmtnum(digits)
Zahlenformatierung zur Steuerung der Anzahl der nach dem Dezimalpunkt ausgegebenen Stellen.
Parameter:
- digits - die Anzahl der Stellen nach dem Dezimalpunkt. Gültiger Bereich: 0-20. Es werden keine nachgestellten Nullen erzeugt.
Beispiele:
{{ITEM.VALUE}.fmtnum(2)} - gibt "24.35" für einen empfangenen Wert von "24.3483523" zurück
{{ITEM.VALUE}.fmtnum(0)} - gibt "24" für einen empfangenen Wert von "24.3483523" zurück
fmttime(format,<time_shift>)
Zeitformatierung.
Beachten Sie, dass diese Funktion mit Makros verwendet werden kann, die zu einem Wert in einem der folgenden Zeitformate aufgelöst werden:
hh:mm:ssyyyy-mm-ddThh:mm:ss[tz](ISO8601-Standard)- UNIX-Zeitstempel
Parameter:
- format - obligatorische Formatzeichenfolge, kompatibel mit der Formatierung der Funktion
strftime; - time_shift (optional) - die Zeitverschiebung, die vor der Formatierung auf die Zeit angewendet wird; sie sollte mit
-<N><time_unit>oder+<N><time_unit>beginnen, wobei:N- die Anzahl der Zeiteinheiten, die addiert oder subtrahiert werden sollen;time_unit- h (Stunde), d (Tag), w (Woche), M (Monat) oder y (Jahr).
Kommentare:
- Der Parameter
time_shiftunterstützt mehrstufige Zeitoperationen und kann/<time_unit>enthalten, um auf den Anfang der Zeiteinheit zu verschieben (/d- Mitternacht,/w- 1. Tag der Woche (Montag),/M- 1. Tag des Monats usw.). Beispiele:-1w- genau 7 Tage zurück;-1w/w- Montag der vorherigen Woche;-1w/w+1d- Dienstag der vorherigen Woche. - Zeitoperationen werden ohne Prioritäten von links nach rechts berechnet.
Zum Beispiel wird
-1M/d+1h/wals((-1M/d)+1h)/wgeparst.
Beispiele:
{{TIME}.fmttime(%B)} - gibt "October" für den empfangenen Wert "1633098961" zurück
{{TIME}.fmttime(%d %B,-1M/M)} - gibt "1 September" für den empfangenen Wert "1633098961" zurück
htmldecode
Dekodieren eines Makrowerts aus der HTML-Kodierung.
Die folgenden Zeichen werden unterstützt:
| Wert | Dekodierter Wert |
|---|---|
& |
& |
< |
< |
> |
> |
" |
" |
' |
' |
' |
' |
Beispiel:
{{ITEM.VALUE}.htmldecode()} - dekodiert einen Wert wie "<" per HTML-Dekodierung zu "<"
htmlencode
Kodierung eines Makrowerts in HTML-Kodierung.
Die folgenden Zeichen werden unterstützt:
| Wert | Kodierter Wert |
|---|---|
& |
& |
< |
< |
> |
> |
" |
" |
' |
' |
Beispiel:
{{ITEM.VALUE}.htmlencode()} - kodiert ein Zeichen wie "<" in "<" mit HTML
iregsub(pattern,output)
Extraktion von Teilzeichenfolgen durch eine Übereinstimmung mit einem regulären Ausdruck (Groß-/Kleinschreibung wird nicht beachtet).
Parameter:
- pattern - der abzugleichende reguläre Ausdruck;
- output - die Ausgabeoptionen. \1 - \9 Platzhalter werden für Erfassungsgruppen unterstützt. \0 gibt den übereinstimmenden Text zurück.
Kommentare:
- Wenn es keine Übereinstimmung für den regulären Ausdruck gibt, gibt die Funktion eine leere Zeichenfolge zurück.
- Wenn das Funktionsmuster ein fehlerhafter regulärer Ausdruck ist, wird das Makro zu 'UNKNOWN' ausgewertet (außer bei Low-Level-Discovery-Makros; in diesem Fall wird die Funktion ignoriert und das Makro bleibt ungelöst).
- Verweise auf nicht vorhandene Erfassungsgruppen in der Ersetzungszeichenfolge werden durch eine leere Zeichenfolge ersetzt.
Beispiel:
{{ITEM.VALUE}.iregsub("fail|error|fault|problem","ERROR")} - wird zu "ERROR" aufgelöst, wenn die Teilzeichenfolgen "fail", "error", "fault" oder "problem" empfangen werden (Groß-/Kleinschreibung wird nicht beachtet); gibt eine leere Zeichenfolge zurück, wenn es keine Übereinstimmung gibt
Kleinbuchstaben
Umwandlung aller Zeichen eines Makrowerts in Kleinbuchstaben.
Funktioniert mit Single-Byte-Zeichensätzen (wie ASCII) und unterstützt kein UTF-8.
Beispiel:
{{ITEM.VALUE}.lowercase()} - wandelt einen Wert wie "Zabbix SERVER" in "zabbix server" um (Kleinbuchstaben)
regrepl(pattern,replacement,<pattern2>,<replacement2>,...)
Ersetzung von Zeichen/Teilzeichenfolgen im Makrowert.
Parameter:
- pattern - der abzugleichende reguläre Ausdruck;
- replacement - die Ersetzungszeichenfolge. \1 - \9 Platzhalter werden in Ersetzungszeichenfolgen für Erfassungsgruppen unterstützt.
Kommentare:
- Die Muster und Ersetzungen werden sequenziell verarbeitet, wobei jedes nachfolgende Paar entsprechend dem Ergebnis der vorherigen Ersetzung angewendet wird;
- Verweise auf nicht vorhandene Erfassungsgruppen in der Ersetzungszeichenfolge werden durch eine leere Zeichenfolge ersetzt.
Beispiele:
{{ITEM.VALUE}.regrepl("oldParam", "newParam")} - ersetzt "oldParam" durch "newParam"
{{ITEM.VALUE}.regrepl("([^a-z])","\\\1")} - alle Nicht-Buchstaben-Zeichen werden mit einem Backslash maskiert
{$THRESHOLD:"{{#FSNAME}.regrepl(\"\\$\",\"\")}"} - entfernt einen abschließenden Backslash (zum Beispiel, um "C:\" durch "C:" zu ersetzen)
{{ITEM.VALUE}.regrepl("_v1\.0", "_v2.0", "\(final\)", "")} - ersetzt mehrere Teile im Datenpunkt-Wert
regsub(pattern,output)
Teilzeichenfolgenextraktion durch eine Übereinstimmung mit einem regulären Ausdruck (Groß-/Kleinschreibung wird beachtet).
Parameter:
- pattern - der abzugleichende reguläre Ausdruck;
- output - die Ausgabeoptionen. \1 - \9 Platzhalter werden für Erfassungsgruppen unterstützt. \0 gibt den übereinstimmenden Text zurück.
Kommentare:
- Wenn es keine Übereinstimmung für den regulären Ausdruck gibt, gibt die Funktion eine leere Zeichenfolge zurück.
- Wenn das Funktionsmuster ein fehlerhafter regulärer Ausdruck ist, wird das Makro zu 'UNKNOWN' ausgewertet (außer bei Low-Level-Discovery-Makros; in diesem Fall wird die Funktion ignoriert und das Makro bleibt ungelöst).
- Verweise auf nicht vorhandene Erfassungsgruppen in der Ersetzungszeichenfolge werden durch eine leere Zeichenfolge ersetzt.
Beispiele:
{{ITEM.VALUE}.regsub("^([0-9]+)", Problem ID: \1)} - wird zu "Problem ID: 123" aufgelöst, wenn ein Wert wie "123 Log line" empfangen wird
{{ITEM.VALUE}.regsub("fail|error|fault|problem","ERROR")} - wird zu "ERROR" aufgelöst, wenn die Teilzeichenfolgen "fail", "error", "fault" oder "problem" empfangen werden (Groß-/Kleinschreibung wird beachtet); gibt eine leere Zeichenfolge zurück, wenn es keine Übereinstimmung gibt
Siehe weitere Beispiele.
tr(characters,replacement)
Transliteration von Makrowert-Zeichen.
- characters - die Menge der zu ersetzenden Zeichen;
- replacement - die Menge der positionsbezogen entsprechenden Ersetzungszeichen.
Beispiele:
{{ITEM.VALUE}.tr(abc, xyz)} - ersetzt alle Vorkommen von "a" durch "x", "b" durch "y", "c" durch "z"
{{ITEM.VALUE}.tr(abc, xyzq)} - ersetzt alle Vorkommen von "a" durch "x", "b" durch "y", "c" durch "z" ("q" wird ignoriert)
{{ITEM.VALUE}.tr(abcde, xyz)} - ersetzt alle Vorkommen von "a" durch "x", "b" durch "y", "c" durch "z", "d" durch "z", "e" durch "z" (d. h. xyzzz)
{{ITEM.VALUE}.tr("\\\'", "\/\"")} - ersetzt alle Vorkommen von Backslash durch Schrägstrich, einfache Anführungszeichen durch doppelte Anführungszeichen
{{ITEM.VALUE}.tr(A-Z,a-z)} - wandelt alle Buchstaben in Kleinbuchstaben um
{{ITEM.VALUE}.tr(0-9a-z,*)} - ersetzt alle Zahlen und Kleinbuchstaben durch "*"
{{ITEM.VALUE}.tr(0-9,ab)} - ersetzt alle Vorkommen von 0 durch "a" und alle Vorkommen von 1, 2, 3, 4, 5, 6, 7, 8 und 9 durch "b"
{{ITEM.VALUE}.tr(0-9abcA-L,*)} - ersetzt alle Zahlen, die Zeichen "abc" und den Bereich A-L durch "*"
{{ITEM.VALUE}.tr("\n","*")} - ersetzt alle Zeilenende-Vorkommen durch *
{{ITEM.VALUE}.tr("e", "\n")} - ersetzt alle "e" durch ein Zeilenende
Um literale Zeichen einzuschließen:
backslash - muss als \\ maskiert werden
einfaches Anführungszeichen - muss als \' maskiert werden
doppeltes Anführungszeichen - muss als \" maskiert werden
Unterstützte Escape-Sequenzen mit Backslash:
\\\\ => \\ - doppelter Backslash zu einfachem Backslash
\\a => \a - Alarm
\\b => \b - Rückschritt
\\f => \f - Seitenvorschub
\\n => \n - Zeilenumbruch
\\r => \r - Wagenrücklauf
\\t => \t - horizontaler Tabulator
\\v => \v - vertikaler Tabulator
Großbuchstaben
Umwandlung aller Zeichen eines Makrowerts in Großbuchstaben.
Funktioniert mit Einzelbyte-Zeichensätzen (wie ASCII) und unterstützt kein UTF-8.
Beispiel:
{{ITEM.VALUE}.uppercase()} - wandelt einen Wert wie "Zabbix Server" in "ZABBIX SERVER" um (Großbuchstaben)
urldecode
Dekodiert einen Makrowert aus der URL-Kodierung.
Beispiel:
{{ITEM.VALUE}.urldecode()} - dekodiert einen Wert wie "%2F" per URL-Dekodierung zu "/"
urlencode
Kodierung eines Makrowerts in URL-Kodierung.
Beispiel:
{{ITEM.VALUE}.urlencode()} - kodiert ein Zeichen wie "/" per URL-Kodierung zu "%2F"
Zusätzliche Beispiele
Die folgende Tabelle zeigt weitere Beispiele für die Verwendung von Makrofunktionen.
:::noteinfo
{#IFALIAS} ist ein LLD-Makro und wird nur in Low-Level-Discovery-Kontexten definiert (Discovery-Regeln, Prototypen und die daraus erstellten Datenpunkte/Auslöser).
Bei Verwendung außerhalb von LLD bleibt das Token unausgewertet.
:::
| Makrofunktion | Empfangener Wert | Ausgabe |
|---|---|---|
{{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* (ungültiger regulärer Ausdruck) |
{{#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)} (ungültiger regulärer Ausdruck) |
{$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)}"} (ungültiger regulärer Ausdruck) |
"{$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)}\"}" (ungültiger regulärer Ausdruck) |
Vollständige Datenpunktwerte anzeigen
Lange Werte aufgelöster Makros {ITEM.VALUE} und {ITEM.LASTVALUE} für Text-/Log-Datenpunkte werden an einigen Stellen im Frontend auf 20 Zeichen gekürzt. Um die vollständigen Werte dieser Makros anzuzeigen, können Sie Makrofunktionen verwenden, z. B.:
{{ITEM.VALUE}.regsub("(.*)", \1)}
{{ITEM.LASTVALUE}.regsub("(.*)", \1)}
Siehe auch: Makrodetails zu {ITEM.VALUE} und {ITEM.LASTVALUE}.