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:ss
  • yyyy-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_shift unterstü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/w als ((-1M/d)+1h)/w geparst.

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
&amp; &
&lt; <
&gt; >
&quot; "
&#039; '
&#39; '

Beispiel:

{{ITEM.VALUE}.htmldecode()} - dekodiert einen Wert wie "&lt;" per HTML-Dekodierung zu "<"
htmlencode

Kodierung eines Makrowerts in HTML-Kodierung.

Die folgenden Zeichen werden unterstützt:

Wert Kodierter Wert
& &amp;
< &lt;
> &gt;
" &quot;
' &#39;

Beispiel:

{{ITEM.VALUE}.htmlencode()} - kodiert ein Zeichen wie "<" in "&lt;" 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}.