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:ssyyyy-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_shiftobsł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/wzostanie 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ść |
|---|---|
& |
& |
< |
< |
> |
> |
" |
" |
' |
' |
' |
' |
Przykład:
{{ITEM.VALUE}.htmldecode()} - zdekoduje HTML wartość taką jak "<" do "<"
htmlencode
Kodowanie wartości makra do kodowania HTML.
Obsługiwane są następujące znaki:
| Wartość | Zakodowana wartość |
|---|---|
& |
& |
< |
< |
> |
> |
" |
" |
' |
' |
Przykład:
{{ITEM.VALUE}.htmlencode()} - zakoduje znak HTML, taki jak "<", do postaci "<"
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}.