1 Makrofunktionen

Überblick

Makrofunktionen bieten die Möglichkeit, Makro-Werte anzupassen (zum Beispiel zu kürzen oder bestimmte Teilzeichenfolgen zu extrahieren), wodurch sie einfacher zu verwenden sind.

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 von Filtern für Low-Level-Discovery-Regeln).

Siehe auch: bekannte Probleme.

Pro Makro wird nur eine Funktion unterstützt; mehrere Makrofunktionen in einer Kette werden nicht unterstützt.

Bitte beachten Sie die Beispiele zum Escaping für Fälle, in denen Makrofunktionen innerhalb anderer Kontexte verwendet werden (Funktion, item-Schlüssel, anderes Makro usw.).

Unterstützte Funktionen

Die Funktionen werden ohne zusätzliche Informationen aufgelistet. Klicken Sie auf die Funktion, um die vollständigen Details anzuzeigen.

Function Description
btoa Kodierung des Makrowerts in das Base64-Format.
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 eines Teilstrings durch einen regulären Ausdrucksvergleich (nicht case-sensitiv).
lowercase Umwandlung der Zeichen des Makrowerts in Kleinbuchstaben.
regrepl Ersetzung von Zeichen/Teilstrings im Makrowert.
regsub Extraktion eines Teilstrings durch einen regulären Ausdrucksvergleich (case-sensitiv).
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

Kodiert einen Makrowert in Base64. Base64-Kodierung ist eine Methode zur Darstellung binärer Daten als Text. Sie ist nützlich für die Speicherung und die sichere Übertragung binärer Inhalte über textbasierte Protokolle.

Beispiel:

{{ITEM.VALUE}.btoa()} - kodiert einen Wert wie "zabbix" in Base64 zu "emFiYml4"

Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

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 einen Wert in einem der folgenden Zeitformate auflösen:

  • 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; sollte mit -<N><time_unit> oder +<N><time_unit> beginnen, wobei:
    • N - die Anzahl der Zeit-Einheiten, die addiert oder subtrahiert werden;
    • 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 an 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 von links nach rechts ohne Prioritäten berechnet. Zum Beispiel wird -1M/d+1h/w als ((-1M/d)+1h)/w interpretiert.

Beispiele:

{{TIMESTAMP}.fmttime(%B)} - gibt "October" aus einem empfangenen Wert von "1633098961" zurück
{{TIMESTAMP}.fmttime(%d %B,-1M/M)} - gibt "1 September" aus einem empfangenen Wert von "1633098961" zurück
htmldecode

Dekodiert einen Makrowert aus der HTML-Kodierung. Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

Die folgenden Zeichen werden unterstützt:

Value Decoded value
&amp; &
&lt; <
&gt; >
&quot; "
&#039; '
&#39; '

Beispiel:

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

Kodierung eines Makrowerts in HTML-Encoding. Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

Die folgenden Zeichen werden unterstützt:

Value Encoded value
& &amp;
< &lt;
> &gt;
" &quot;
' &#39;

Beispiel:

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

Transformation aller Zeichen des Makrowerts in Kleinbuchstaben. Funktioniert mit Single-Byte-Zeichensätzen (wie ASCII) und unterstützt kein UTF-8. Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

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.
Beachten Sie, dass diese Funktion nur mit der Bibliothek libpcre2 unterstützt wird. Wenn Zabbix Server/Proxy mit libpcre kompiliert wurde, gibt diese Funktion UNKNOWN zurück. Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

Parameter:

  • pattern - der reguläre Ausdruck, der abgeglichen werden soll;
  • replacement - die Ersetzungszeichenfolge. Platzhalter \1 - \9 werden in Ersetzungszeichenfolgen unterstützt, um Gruppen zu erfassen.

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 (z. B. um "C:\" durch "C:" zu ersetzen)
{{ITEM.VALUE}.regrepl("_v1\.0", "_v2.0", "\(final\)", "")} - ersetzt mehrere Teile im Datenpunktwert
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. Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

  • characters - die Menge der zu ersetzenden Zeichen;
  • replacement - die Menge der positionsweise entsprechenden Ersatzzeichen.

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 Vorkommen von Zeilenenden durch *
{{ITEM.VALUE}.tr("e", "\n")} - ersetzt alle "e" durch Zeilenende

Um literale Zeichen einzuschließen:

backslash - muss als \\\\ maskiert werden
single quote - muss als \\' maskiert werden
double quote - 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 - neue Zeile
\\r  => \r - Wagenrücklauf
\\t  => \t - horizontaler Tabulator
\\v  => \v - vertikaler Tabulator
Großschreibung

Transformation aller Zeichen des Makrowerts in Großbuchstaben. Funktioniert mit Single-Byte-Zeichensätzen (wie ASCII) und unterstützt kein UTF-8. Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

Beispiel:

{{ITEM.VALUE}.uppercase()} - wandelt einen Wert wie "Zabbix Server" in "ZABBIX SERVER" um (Großbuchstaben)
urldecode

Dekodiert einen Makrowert aus der URL-Kodierung. Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

Beispiel:

{{ITEM.VALUE}.urldecode()} - wandelt einen Wert wie "%2F" per URL-Decodierung in "/" um
urlencode

Kodiert einen Makrowert in URL-Encoding. Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

Beispiel:

{{ITEM.VALUE}.urlencode()} - kodiert ein Zeichen wie "/" in "%2F"

Zusätzliche Beispiele

Die folgende Tabelle zeigt weitere Beispiele für die Verwendung von Makrofunktionen.

:::noteinfo {#IFALIAS} ist ein LLD-Makro und ist nur in Low-Level-Discovery-Kontexten definiert (Discovery-Regeln, Prototypen und die daraus erstellten Datenpunkte/Auslöser). Wenn es außerhalb von LLD verwendet wird, bleibt das Token nicht erweitert. :::

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 der aufgelösten 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: {ITEM.VALUE} und {ITEM.LASTVALUE} Makrodetails.