1 Funkcje makr

Omówienie

Funkcje makr umożliwiają dostosowywanie wartości makr (na przykład skracanie lub wyodrębnianie określonych podciągów), co ułatwia ich używanie.

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 rozdzielona przecinkami, która musi być ujęta w podwójne cudzysłowy, jeśli:
    • zaczyna się od spacji lub podwójnego cudzysłowu;
    • zawiera nawias zamykający 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 można stosować we wszystkich miejscach obsługujących wymienione makra. Dotyczy to sytuacji, 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).

Zobacz także: znane problemy.

Obsługiwana jest tylko jedna funkcja na jedno makro; łączenie wielu funkcji makr w łańcuch nie jest obsługiwane.

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

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 uwzględniania 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 uwzględnianiem 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 formatu Base64. Kodowanie Base64 to metoda reprezentowania 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 Base64 jako "emFiYml4"

Ta funkcja jest obsługiwana od Zabbix 7.0.4.

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 rozwiązują się do wartości w jednym z następujących formatów czasu:

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

Parametry:

  • format - wymagany ciąg formatu, zgodny z formatowaniem funkcji strftime;
  • time_shift (opcjonalny) - przesunięcie czasu zastosowane 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> w celu przesunięcia do początku jednostki czasu (/d - północ, /w - pierwszy dzień tygodnia (poniedziałek), /M - pierwszy 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:

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

Dekodowanie wartości makra z kodowania HTML. Ta funkcja jest obsługiwana od Zabbix 7.0.4.

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

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

Przykład:

{{ITEM.VALUE}.htmldecode()} - spowoduje dekodowanie HTML wartości takiej jak "&lt;" do "<"
htmlencode

Kodowanie wartości makra do kodowania HTML. Ta funkcja jest obsługiwana od Zabbix 7.0.4.

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

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

Przykład:

{{ITEM.VALUE}.htmlencode()} - spowoduje zakodowanie HTML znaku takiego jak "<" do "&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
lowercase

Przekształca wszystkie znaki wartości makra na małe litery. Działa z zestawami znaków jednobajtowych (takimi jak ASCII) i nie obsługuje UTF-8. Ta funkcja jest obsługiwana od Zabbix 7.0.4.

Przykład:

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

Zastępowanie znaku/podciągu w wartości makra.
Należy pamiętać, że ta funkcja jest obsługiwana wyłącznie przez bibliotekę libpcre2. Jeśli serwer/proxy Zabbix został skompilowany z libpcre, ta funkcja zwróci UNKNOWN. Ta funkcja jest obsługiwana od Zabbix 7.0.4.

Parametry:

  • pattern - wyrażenie regularne do dopasowania;
  • replacement - ciąg zastępczy. W ciągach zastępczych obsługiwane są symbole zastępcze \1 - \9 do przechwytywania grup.

Uwagi:

  • Wzorce i zamiany są przetwarzane sekwencyjnie, a każda kolejna para jest stosowana zgodnie z wynikiem poprzedniej zamiany;
  • Odwołania do nieistniejących grup przechwytywania w ciągu zastępczym są zastępowane pustym ciągiem.

Przykłady:

{{ITEM.VALUE}.regrepl("oldParam", "newParam")} - zastąpi "oldParam" ciągiem "newParam"
{{ITEM.VALUE}.regrepl("([^a-z])","\\\1")} - wszystkie znaki inne niż litery zostaną poprzedzone ukośnikiem odwrotnym
{$THRESHOLD:"{{#FSNAME}.regrepl(\"\\$\",\"\")}"} - usunie końcowy ukośnik odwrotny (na przykład, aby zastąpić "C:\" ciągiem "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. Ta funkcja jest obsługiwana od Zabbix 7.0.4.

  • 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 ukośnym, a pojedyncze cudzysłowy podwójnymi cudzysłowami
{{ITEM.VALUE}.tr(A-Z,a-z)} - zamieni 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 znakiem "a" oraz wszystkie wystąpienia 1, 2, 3, 4, 5, 6, 7, 8 i 9 znakiem "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 wiersza znakiem *
{{ITEM.VALUE}.tr("e", "\n")} - zastąpi wszystkie "e" końcem wiersza

Aby uwzględnić znaki dosłowne:

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

Obsługiwane sekwencje escape z ukośnikiem odwrotnym:

\\\\ => \\ - podwójny ukośnik odwrotny do pojedynczego ukośnika odwrotnego
\\a  => \a - alert
\\b  => \b - backspace
\\f  => \f - form feed
\\n  => \n - nowa linia
\\r  => \r - powrót karetki
\\t  => \t - pozioma tabulacja
\\v  => \v - pionowa tabulacja
wielkie litery

Przekształca wszystkie znaki wartości makra na wielkie litery. Działa z zestawami znaków jednobajtowych (takimi jak ASCII) i nie obsługuje UTF-8. Ta funkcja jest obsługiwana od Zabbix 7.0.4.

Przykład:

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

Dekodowanie wartości makra z kodowania URL. Ta funkcja jest obsługiwana od Zabbix 7.0.4.

Przykład:

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

Kodowanie wartości makra do formatu URL encoding. Ta funkcja jest obsługiwana od Zabbix 7.0.4.

Przykład:

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

Dodatkowe przykłady

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

:::noteinfo {#IFALIAS} jest makrem LLD i jest definiowane wyłącznie w kontekstach niskopoziomowego wykrywania (reguły wykrywania, prototypy oraz pozycje/wyzwalacze utworzone na ich podstawie). Użycie go poza LLD spowoduje, że token nie zostanie rozwinięty. :::

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żesz użyć funkcji makr, np.:

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

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