1 Funkcje makr

Przegląd

Funkcje makr umożliwiają dostosowanie wartości makr (na przykład skrócenie ich lub wyodrębnienie określonych podciągów), dzięki czemu łatwiej się z nimi pracuje.

Składnia funkcji makra jest następująca:

{macro.func(params)}

gdzie

  • macro - makro do dostosowania;
  • func - funkcja do zastosowania (zobacz obsługiwane funkcje);
  • params - lista parametrów funkcji rozdzielonych przecinkami, które muszą być ujęte w podwójne cudzysłowy, jeśli:
    • zaczynają się od spacji lub podwójnego cudzysłowu;
    • zawierają zamykający nawias lub przecinek.

Na przykład:

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

Funkcje makr są obsługiwane dla

Funkcje makr mogą być używane we wszystkich miejscach obsługujących wymienione makra. Dotyczy to wszystkich przypadków, chyba że wyraźnie zaznaczono, że oczekiwane jest tylko makro (na przykład podczas konfigurowania makr hosta lub filtrów reguły wykrywania niskiego poziomu).

Obsługiwana jest pojedyncza funkcja na makro; wiele funkcji makr połączonych w łańcuch nie jest obsługiwanych.

Zobacz przykłady znaków ucieczki dla przypadków, gdy funkcje makr są używane w innych kontekstach (funkcja, klucz pozycji, inne makro itd.).

Obsługiwane funkcje

Funkcje są wymienione bez dodatkowych informacji. Kliknij funkcję, aby zobaczyć pełne szczegóły.

Function Description
btoa Kodowanie wartości makra do formatu Base64.
fmtnum Formatowanie liczby w celu kontrolowania liczby cyfr wyświetlanych po przecinku.
fmttime Formatowanie czasu.
htmldecode Dekodowanie wartości makra z kodowania HTML.
htmlencode Kodowanie wartości makra do kodowania HTML.
iregsub Wyodrębnianie podciągu na podstawie dopasowania wyrażenia regularnego (bez rozróżniania wielkości liter).
lowercase Przekształcanie znaków wartości makra na małe litery.
regrepl Zastępowanie znaku/podciągu w wartości makra.
regsub Wyodrębnianie podciągu na podstawie dopasowania wyrażenia regularnego (z rozróżnianiem wielkości liter).
tr Transliteracja znaków wartości makra.
uppercase Przekształcanie znaków wartości makra na wielkie litery.
urldecode Dekodowanie wartości makra z kodowania URL.
urlencode Kodowanie wartości makra do kodowania URL.

Szczegóły funkcji

Opcjonalne parametry funkcji są oznaczone przez < >.

btoa

Kodowanie wartości makra do kodowania Base64. Kodowanie Base64 to metoda przedstawiania danych binarnych jako tekstu, przydatna do przechowywania i bezpiecznego przesyłania zawartości binarnej za pośrednictwem protokołów tekstowych.

Przykład:

{{ITEM.VALUE}.btoa()} - zakoduje wartość taką jak "zabbix" do postaci Base64 "emFiYml4"
fmtnum(digits)

Formatowanie liczb umożliwiające kontrolę liczby cyfr wyświetlanych po przecinku.

Parametry:

  • digits — liczba cyfr po przecinku. Prawidłowy zakres: 0-20. Końcowe zera nie będą dodawane.

Przykłady:

{{ITEM.VALUE}.fmtnum(2)} - zwróci "24.35" dla otrzymanej wartości "24.3483523"
{{ITEM.VALUE}.fmtnum(0)} - zwróci "24" dla otrzymanej wartości "24.3483523"
fmttime(format,<time_shift>)

Formatowanie czasu.
Należy pamiętać, że tej funkcji można używać z makrami, które są rozwijane do wartości w jednym z następujących formatów czasu:

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

Parametry:

  • format - obowiązkowy ciąg formatu, zgodny z formatowaniem funkcji strftime;
  • time_shift (opcjonalnie) - przesunięcie czasu stosowane do czasu przed formatowaniem; powinno zaczynać się od -<N><time_unit> lub +<N><time_unit>, gdzie:
    • N - liczba jednostek czasu do dodania lub odjęcia;
    • time_unit - h (godzina), d (dzień), w (tydzień), M (miesiąc) lub y (rok).

Uwagi:

  • Parametr time_shift obsługuje wieloetapowe operacje na czasie i może zawierać /<time_unit> do przesunięcia na początek jednostki czasu (/d - północ, /w - 1. dzień tygodnia (poniedziałek), /M - 1. dzień miesiąca itd.). Przykłady: -1w - dokładnie 7 dni wstecz; -1w/w - poniedziałek poprzedniego tygodnia; -1w/w+1d - wtorek poprzedniego tygodnia.
  • Operacje na czasie są obliczane od lewej do prawej bez priorytetów. Na przykład -1M/d+1h/w zostanie zinterpretowane jako ((-1M/d)+1h)/w.

Przykłady:

{{TIME}.fmttime(%B)} - zwróci "October" dla otrzymanej wartości "1633098961"
{{TIME}.fmttime(%d %B,-1M/M)} - zwróci "1 September" dla otrzymanej wartości "1633098961"
htmldecode

Dekodowanie wartości makra z kodowania HTML.

Obsługiwane są następujące znaki:

Wartość Zdekodowana wartość
&amp; &
&lt; <
&gt; >
&quot; "
&#039; '
&#39; '

Przykład:

{{ITEM.VALUE}.htmldecode()} - zdekoduje HTML wartość taką jak "&lt;" do "<"
htmlencode

Kodowanie wartości makra do kodowania HTML.

Obsługiwane są następujące znaki:

Wartość Zakodowana wartość
& &amp;
< &lt;
> &gt;
" &quot;
' &#39;

Przykład:

{{ITEM.VALUE}.htmlencode()} - zakoduje znak HTML, taki jak "<", do postaci "&lt;"
iregsub(pattern,output)

Wyodrębnianie podciągu na podstawie dopasowania wyrażenia regularnego (bez rozróżniania wielkości liter).

Parametry:

  • pattern - wyrażenie regularne do dopasowania;
  • output - opcje wyjściowe. Symbole zastępcze \1 - \9 są obsługiwane dla grup przechwytywania. \0 zwraca dopasowany tekst.

Uwagi:

  • Jeśli nie ma dopasowania dla wyrażenia regularnego, funkcja zwraca pusty ciąg.
  • Jeśli wzorzec funkcji jest niepoprawnym wyrażeniem regularnym, makro jest obliczane jako 'UNKNOWN' (z wyjątkiem makr wykrywania niskiego poziomu, w których przypadku funkcja zostanie zignorowana, a makro pozostanie nierozwiązane).
  • Odwołania do nieistniejących grup przechwytywania w ciągu zastępczym są zastępowane pustym ciągiem.

Przykład:

{{ITEM.VALUE}.iregsub("fail|error|fault|problem","ERROR")} - zostanie rozwinięte do "ERROR", jeśli zostaną odebrane podciągi "fail", "error", "fault" lub "problem" (bez rozróżniania wielkości liter); zwróci pusty ciąg, jeśli nie będzie dopasowania
małe litery

Przekształcenie wszystkich znaków wartości makra na małe litery.
Działa z jednobajtowymi zestawami znaków (takimi jak ASCII) i nie obsługuje UTF-8.

Przykład:

{{ITEM.VALUE}.lowercase()} - przekształci wartość taką jak "Zabbix SERVER" na "zabbix server" (małe litery)
regrepl(pattern,replacement,<pattern2>,<replacement2>,...)

Zastępowanie znaku/podciągu w wartości makra.

Parametry:

  • pattern - wyrażenie regularne do dopasowania;
  • replacement - ciąg zastępujący. Symbole zastępcze \1 - \9 są obsługiwane w ciągach zastępujących dla grup przechwytywania.

Uwagi:

  • Wzorce i ciągi zastępujące są przetwarzane sekwencyjnie, przy czym każda kolejna para jest stosowana zgodnie z wynikiem poprzedniego zastąpienia;
  • Odwołania do nieistniejących grup przechwytywania w ciągu zastępującym są zastępowane pustym ciągiem.

Przykłady:

{{ITEM.VALUE}.regrepl("oldParam", "newParam")} - zastąpi "oldParam" przez "newParam"
{{ITEM.VALUE}.regrepl("([^a-z])","\\\1")} - wszystkie znaki niebędące literami zostaną poprzedzone ukośnikiem odwrotnym
{$THRESHOLD:"{{#FSNAME}.regrepl(\"\\$\",\"\")}"} - usunie końcowy ukośnik odwrotny (na przykład, aby zastąpić "C:\" przez "C:")
{{ITEM.VALUE}.regrepl("_v1\.0", "_v2.0", "\(final\)", "")} - zastąpi wiele fragmentów w wartości pozycji
regsub(pattern,output)

Wyodrębnianie podciągu na podstawie dopasowania wyrażenia regularnego (z uwzględnieniem wielkości liter).

Parametry:

  • pattern - wyrażenie regularne do dopasowania;
  • output - opcje danych wyjściowych. Symbole zastępcze \1 - \9 są obsługiwane dla grup przechwytywania. \0 zwraca dopasowany tekst.

Uwagi:

  • Jeśli nie ma dopasowania do wyrażenia regularnego, funkcja zwraca pusty ciąg.
  • Jeśli wzorzec funkcji jest niepoprawnym wyrażeniem regularnym, makro przyjmuje wartość 'UNKNOWN' (z wyjątkiem makr wykrywania niskiego poziomu, w których przypadku funkcja zostanie zignorowana, a makro pozostanie nierozwiązane).
  • Odwołania do nieistniejących grup przechwytywania w ciągu zastępczym są zastępowane pustym ciągiem.

Przykłady:

{{ITEM.VALUE}.regsub("^([0-9]+)", Problem ID: \1)} - zostanie rozwinięte do "Problem ID: 123", jeśli zostanie odebrana wartość taka jak "123 Log line"
{{ITEM.VALUE}.regsub("fail|error|fault|problem","ERROR")} - zostanie rozwinięte do "ERROR", jeśli zostaną odebrane podciągi "fail", "error", "fault" lub "problem" (z uwzględnieniem wielkości liter); zwróci pusty ciąg, jeśli nie będzie dopasowania

Zobacz więcej przykładów.

tr(characters,replacement)

Transliteracja znaków wartości makra.

  • characters - zestaw znaków do zastąpienia;
  • replacement - zestaw odpowiadających im pozycyjnie znaków zastępczych.

Przykłady:

{{ITEM.VALUE}.tr(abc, xyz)} - zastąpi wszystkie wystąpienia "a" przez "x", "b" przez "y", "c" przez "z"
{{ITEM.VALUE}.tr(abc, xyzq)} - zastąpi wszystkie wystąpienia "a" przez "x", "b" przez "y", "c" przez "z" ("q" jest ignorowane)
{{ITEM.VALUE}.tr(abcde, xyz)} - zastąpi wszystkie wystąpienia "a" przez "x", "b" przez "y", "c" przez "z", "d" przez "z", "e" przez "z" (tj. xyzzz)
{{ITEM.VALUE}.tr("\\\'", "\/\"")} - zastąpi wszystkie wystąpienia ukośnika odwrotnego ukośnikiem prostym, a pojedyncze cudzysłowy podwójnymi cudzysłowami
{{ITEM.VALUE}.tr(A-Z,a-z)} - przekonwertuje wszystkie litery na małe
{{ITEM.VALUE}.tr(0-9a-z,*)} - zastąpi wszystkie cyfry i małe litery znakiem "*"
{{ITEM.VALUE}.tr(0-9,ab)} - zastąpi wszystkie wystąpienia 0 przez "a", a wszystkie wystąpienia 1, 2, 3, 4, 5, 6, 7, 8 i 9 przez "b"
{{ITEM.VALUE}.tr(0-9abcA-L,*)} - zastąpi wszystkie cyfry, znaki "abc" oraz zakres A-L znakiem "*"
{{ITEM.VALUE}.tr("\n","*")} - zastąpi wystąpienia końca linii znakiem *
{{ITEM.VALUE}.tr("e", "\n")} - zastąpi wszystkie "e" znakiem końca linii

Aby uwzględnić znaki literałowe:

ukośnik odwrotny - musi być zapisany jako \\
pojedynczy cudzysłów - musi być zapisany jako \'
podwójny cudzysłów - musi być zapisany jako \"

Obsługiwane sekwencje ucieczki z ukośnikiem odwrotnym:

\\\\ => \\ - podwójny ukośnik odwrotny na pojedynczy ukośnik odwrotny
\\a  => \a - alert
\\b  => \b - backspace
\\f  => \f - wysunięcie strony
\\n  => \n - nowa linia
\\r  => \r - powrót karetki
\\t  => \t - tabulator poziomy
\\v  => \v - tabulator pionowy
wielkie litery

Przekształcenie wszystkich znaków wartości makra na wielkie litery. Działa z jednobajtowymi zestawami znaków (takimi jak ASCII) i nie obsługuje UTF-8.

Przykład:

{{ITEM.VALUE}.uppercase()} - przekształci wartość taką jak "Zabbix Server" na "ZABBIX SERVER" (wielkie litery)
urldecode

Dekodowanie wartości makra z kodowania URL.

Przykład:

{{ITEM.VALUE}.urldecode()} - zdekoduje URL wartość taką jak "%2F" do "/"
urlencode

Kodowanie wartości makra do formatu URL encoding.

Przykład:

{{ITEM.VALUE}.urlencode()} - zakoduje znak taki jak "/" do postaci "%2F"

Dodatkowe przykłady

Poniższa tabela pokazuje więcej przykładów użycia funkcji makr.

:::noteinfo {#IFALIAS} jest makrem LLD i jest zdefiniowane tylko w kontekstach low-level discovery (reguły wykrywania, prototypy oraz pozycje/wyzwalacze utworzone na ich podstawie). Użycie go poza LLD spowoduje pozostawienie tokenu bez rozwinięcia. :::

Funkcja makra Otrzymana wartość Wynik
{{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* (nieprawidłowe wyrażenie regularne)
{{#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)} (nieprawidłowe wyrażenie regularne)
{$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)}"} (nieprawidłowe wyrażenie regularne)
"{$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)}\"}" (nieprawidłowe wyrażenie regularne)
Wyświetlanie pełnych wartości pozycji

Długie wartości rozwiniętych makr {ITEM.VALUE} i {ITEM.LASTVALUE} dla pozycji tekstowych/logów są w niektórych miejscach frontend skracane do 20 znaków. Aby zobaczyć pełne wartości tych makr, można użyć funkcji makr, np.:

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

Zobacz także: szczegóły makr} i {ITEM.LASTVALUE}.