10 Wyrażenia regularne
Przegląd
Wyrażenia regularne zgodne z Perlem (PCRE, PCRE2) są obsługiwane w Zabbix.
Istnieją dwa sposoby używania wyrażeń regularnych w Zabbix:
- ręczne wprowadzanie wyrażenia regularnego
- użycie globalnego wyrażenia regularnego utworzonego w Zabbix
Wyrażenia regularne
W obsługiwanych miejscach można ręcznie wprowadzić wyrażenie regularne. Należy pamiętać, że wyrażenie nie może zaczynać się od znaku @, ponieważ symbol ten jest używany w Zabbix do odwoływania się do globalnych wyrażeń regularnych.
Podczas używania wyrażeń regularnych może dojść do przepełnienia stosu. Więcej informacji można znaleźć na stronie podręcznika pcrestack man page.
Należy pamiętać, że przy dopasowywaniu wielowierszowym kotwice ^ i $ dopasowują się odpowiednio do
początku/końca każdej linii, a nie do początku/końca całego ciągu znaków.
Zobacz także przykłady poprawnego użycia znaków ucieczki w różnych kontekstach.
Globalne wyrażenia regularne
W Zabbix frontend dostępny jest zaawansowany edytor do tworzenia i testowania złożonych wyrażeń regularnych.
Po utworzeniu wyrażenia regularnego w ten sposób można go używać w kilku miejscach we frontend, odwołując się do jego nazwy poprzedzonej znakiem @, na przykład \@mycustomregexp.
Aby utworzyć globalne wyrażenie regularne:
- Przejdź do: Administracja → Ogólne
- Wybierz Wyrażenia regularne z listy rozwijanej
- Kliknij Nowe wyrażenie regularne
Karta Wyrażenia umożliwia ustawienie nazwy wyrażenia regularnego i dodanie podwyrażeń.

Wszystkie wymagane pola wejściowe są oznaczone czerwoną gwiazdką.
| Parametr | Opis | |
|---|---|---|
| Nazwa | Ustaw nazwę wyrażenia regularnego. Dozwolone są dowolne znaki Unicode. | |
| Wyrażenia | Kliknij Dodaj w bloku Wyrażenia, aby dodać nowe podwyrażenie. | |
| Typ wyrażenia | Wybierz typ wyrażenia: Ciąg znaków zawarty - dopasuj podciąg Dowolny ciąg znaków zawarty - dopasuj dowolny podciąg z listy rozdzielanej separatorem. Lista rozdzielana separatorem zawiera przecinek (,), kropkę (.) lub ukośnik (/). Ciąg znaków niezawarty - dopasuj dowolny ciąg z wyjątkiem podciągu Wynik to TRUE - dopasuj wyrażenie regularne Wynik to FALSE - nie dopasowuj wyrażenia regularnego |
|
| Wyrażenie | Wprowadź podciąg/wyrażenie regularne. | |
| Separator | Przecinek (,), kropka (.) lub ukośnik (/) służące do rozdzielania ciągów tekstowych w wyrażeniu regularnym. Ten parametr jest aktywny tylko wtedy, gdy wybrano typ wyrażenia "Dowolny ciąg znaków zawarty". | |
| Uwzględniaj wielkość liter | Pole wyboru określające, czy wyrażenie regularne rozróżnia wielkość liter. | |
Ukośnik (/) w wyrażeniu jest traktowany dosłownie, a nie jako separator. Dzięki temu można zapisywać wyrażenia zawierające ukośnik bez błędów.
Niestandardowa nazwa wyrażenia regularnego w Zabbix może zawierać przecinki, spacje itp. W przypadkach, gdy może to prowadzić do błędnej interpretacji podczas odwoływania się do niej (na przykład przecinek w parametrze klucza pozycji), całe odwołanie można ująć w cudzysłów w następujący sposób: "\@My custom regexp for purpose1, purpose2".
Nazwy wyrażeń regularnych nie mogą być ujmowane w cudzysłów w innych miejscach (na przykład we właściwościach reguły LLD).
Na karcie Test wyrażenie regularne i jego podwyrażenia można przetestować, podając ciąg testowy.

Wyniki pokazują status każdego podwyrażenia oraz łączny status niestandardowego wyrażenia.
Łączny status niestandardowego wyrażenia jest określany jako Wynik łączony. Jeśli zdefiniowano kilka podwyrażeń, Zabbix używa operatora logicznego AND do obliczenia Wyniku łączonego. Oznacza to, że jeśli co najmniej jeden wynik ma wartość False, Wynik łączony również ma status False.
Domyślne globalne wyrażenia regularne
Zabbix zawiera kilka globalnych wyrażeń regularnych w swoim domyślnym zestawie danych.
| Name | Expression | Matches |
|---|---|---|
| Systemy plików do wykrywania | ^(btrfs|ext2|ext3|ext4|jfs|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|refs|apfs|ntfs|fat32|zfs)$ |
"btrfs" lub "ext2" lub "ext3" lub "ext4" lub "jfs" lub "reiser" lub "xfs" lub "ffs" lub "ufs" lub "jfs" lub "jfs2" lub "vxfs" lub "hfs" lub "refs" lub "apfs" lub "ntfs" lub "fat32" lub "zfs" |
| Interfejsy sieciowe do wykrywania | ^Software Loopback Interface |
Ciągi znaków zaczynające się od "Software Loopback Interface". |
^lo$ |
"lo" | |
^(In)?[Ll]oop[Bb]ack[0-9._]*$ |
Ciągi znaków, które opcjonalnie zaczynają się od "In", następnie mają "L" lub "l", potem "oop", następnie "B" lub "b", potem "ack", po czym opcjonalnie może występować dowolna liczba cyfr, kropek lub podkreśleń. | |
^NULL[0-9.]*$ |
Ciągi znaków zaczynające się od "NULL", po których opcjonalnie występuje dowolna liczba cyfr lub kropek. | |
^[Ll]o[0-9.]*$ |
Ciągi znaków zaczynające się od "Lo" lub "lo", po których opcjonalnie występuje dowolna liczba cyfr lub kropek. | |
^[Ss]ystem$ |
"System" lub "system" | |
^Nu[0-9.]*$ |
Ciągi znaków zaczynające się od "Nu", po których opcjonalnie występuje dowolna liczba cyfr lub kropek. | |
| Urządzenia pamięci masowej do wykrywania SNMP | ^(Physical memory|Virtual memory|Memory buffers|Cached memory|Swap space)$ |
"Physical memory" lub "Virtual memory" lub "Memory buffers" lub "Cached memory" lub "Swap space" |
| Nazwy usług Windows do wykrywania | ^(MMCSS|gupdate|SysmonLog|clr_optimization_v2.0.50727_32|clr_optimization_v4.0.30319_32)$ |
"MMCSS" lub "gupdate" lub "SysmonLog" lub ciągi znaków takie jak "clr_optimization_v2.0.50727_32" i "clr_optimization_v4.0.30319_32", gdzie zamiast kropek można wstawić dowolny znak z wyjątkiem znaku nowej linii. |
| Stany uruchamiania usług Windows do wykrywania | ^(automatic|automatic delayed)$ |
"automatic" lub "automatic delayed" |
Przykłady
Przykład 1
Użycie następującego wyrażenia w wykrywaniu niskiego poziomu do wykrywania baz danych z wyjątkiem bazy danych o określonej nazwie:
^TESTDATABASE$

Wybrany Typ wyrażenia: „Wynik to FALSE”. Nie pasuje do nazwy zawierającej ciąg „TESTDATABASE”.
Przykład z modyfikatorem regex w linii
Użycie następującego wyrażenia regularnego, zawierającego modyfikator w linii (?i), do dopasowania znaków „error”:
(?i)error

Wybrany Typ wyrażenia: „Wynik to TRUE”. Znaki „error” są dopasowane.
Kolejny przykład z modyfikatorem regex inline
Użycie następującego wyrażenia regularnego zawierającego wiele modyfikatorów inline do dopasowania znaków po określonej linii:
(?<=match (?i)everything(?-i) after this line\n)(?sx).*# dodajemy modyfikator s, aby umożliwić dopasowanie znaku . do znaków nowej linii

Wybrany typ wyrażenia: „Wynik to TRUE”. Znaki po określonej linii są dopasowywane.
Modyfikator g nie może być określony w linii. Lista dostępnych modyfikatorów znajduje się na stronie podręcznika pcresyntax. Więcej informacji o składni PCRE można znaleźć w dokumentacji HTML PCRE.
Obsługa wyrażeń regularnych według lokalizacji
| Lokalizacja | Wyrażenie regularne | Globalne wyrażenie regularne | Dopasowanie wielowierszowe | Komentarze | |
|---|---|---|---|---|---|
| Pozycje agenta | |||||
| eventlog[] | Tak | Tak | Tak | parametry regexp, severity, source, eventid |
|
| eventlog.count[] | parametry regexp, severity, source, eventid |
||||
| log[] | parametr regexp |
||||
| log.count[] | |||||
| logrt[] | Tak/Nie | parametr regexp obsługuje oba typy, parametr file_regexp obsługuje tylko wyrażenia nieglobalne |
|||
| logrt.count[] | |||||
| proc.cpu.util[] | Nie | Nie | parametr cmdline |
||
| proc.get[] | |||||
| proc.mem[] | |||||
| proc.num[] | |||||
| sensor[] | parametry device i sensor w systemie Linux 2.4 |
||||
| system.hw.macaddr[] | parametr interface |
||||
| system.sw.packages[] | parametr regexp |
||||
| system.sw.packages.get[] | parametr regexp |
||||
| vfs.dir.count[] | parametry regex_incl, regex_excl, regex_excl_dir |
||||
| vfs.dir.get[] | parametry regex_incl, regex_excl, regex_excl_dir |
||||
| vfs.dir.size[] | parametry regex_incl, regex_excl, regex_excl_dir |
||||
| vfs.file.regexp[] | Tak | parametr regexp |
|||
| vfs.file.regmatch[] | |||||
| web.page.regexp[] | |||||
| Pułapki SNMP | |||||
| snmptrap[] | Tak | Tak | Nie | parametr regexp |
|
| Wstępne przetwarzanie wartości pozycji | Tak | Nie | Nie | parametr pattern |
|
| Funkcje dla wyzwalaczy/pozycji obliczanych | |||||
| count() | Tak | Tak | Tak | parametr pattern, jeśli parametr operator ma wartość regexp lub iregexp |
|
| countunique() | Tak | Tak | |||
| find() | Tak | Tak | |||
| logeventid() | Tak | Tak | Nie | parametr pattern |
|
| logsource() | |||||
| Odkrywanie niskiego poziomu | |||||
| Filtry | Tak | Tak | Nie | pole Wyrażenie regularne | |
| Nadpisania | Tak | Nie | W opcjach pasuje, nie pasuje dla warunków Operacji | ||
| Warunki akcji | Tak | Nie | Nie | W opcjach pasuje, nie pasuje dla warunków autorejestracji Nazwa hosta i Metadane hosta | |
| Skrypty | Tak | Tak | Nie | pole Reguła walidacji wejścia | |
| Monitorowanie WWW | Tak | Nie | Tak | Zmienne z prefiksem regex: pole Wymagany ciąg |
|
| Kontekst makra użytkownika | Tak | Nie | Nie | W kontekście makra z prefiksem regex: | |
| Funkcje makr | |||||
| regsub() | Tak | Nie | Nie | parametr pattern |
|
| iregsub() | |||||
| Wskaźniki łączy na mapach | Tak | Nie | Nie | pole Wzorzec (dla pozycji tekstowych) | |
| Mapowanie ikon | Tak | Tak | Nie | pole Wyrażenie | |
| Mapowanie wartości | Tak | Nie | Nie | pole Wartość, jeśli typ mapowania to regexp |
|