Wyrażenia regularne
Przegląd
Perl Compatible Regular Expressions (PCRE, PCRE2) są obsługiwane w Zabbix.
W Zabbix można używać wyrażeń regularnych na dwa sposoby:
- ręcznie wprowadzając wyrażenie regularne
- używając 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 @, ponieważ ten symbol jest używany w Zabbix do odwoływania się do globalnych wyrażeń regularnych.
Podczas używania wyrażeń regularnych może dojść do wyczerpania pamięci stosu. Więcej informacji można znaleźć w sekcji PCRE PERFORMANCE.
Należy pamiętać, że w 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.
Zobacz też przykłady dotyczące poprawnego escapowania w różnych kontekstach.
Globalne wyrażenia regularne
W frontend Zabbix 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 używać go w kilku miejscach w frontend, odwołując się do jego nazwy poprzedzonej symbolem @, na przykład @mycustomregexp.
Aby utworzyć globalne wyrażenie regularne:
- Przejdź do Administration > General.
- Wybierz Regular expressions z listy rozwijanej.
- Kliknij New regular expression.
Karta Expressions umożliwia ustawienie nazwy wyrażenia regularnego i dodanie podwyrażeń.

Wszystkie wymagane pola wejściowe są oznaczone czerwoną gwiazdką.
| Parameter | Description | |
|---|---|---|
| Name | Ustaw nazwę wyrażenia regularnego. Dozwolone są dowolne znaki Unicode. | |
| Expressions | Kliknij Add w bloku Expressions, aby dodać nowe podwyrażenie. | |
| Expression type | Wybierz typ wyrażenia: Character string included - dopasuj podciąg Any character string included - dopasuj dowolny podciąg z listy rozdzielanej znakami. Lista rozdzielana znakami obejmuje przecinek (,), kropkę (.) lub ukośnik (/). Character string not included - dopasuj dowolny ciąg z wyjątkiem podciągu Result is TRUE - dopasuj wyrażenie regularne Result is FALSE - nie dopasowuj wyrażenia regularnego |
|
| Expression | Wprowadź podciąg/wyrażenie regularne. | |
| Delimiter | Przecinek (,), kropka (.) lub ukośnik (/) służący do rozdzielania ciągów tekstowych w wyrażeniu regularnym. Ten parametr jest aktywny tylko wtedy, gdy wybrany jest typ wyrażenia "Any character string included". | |
| Case sensitive | 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 pozycja), całe odwołanie można ująć w cudzysłów, na przykład: "\@My custom regexp for purpose1, purpose2".
Nazw wyrażeń regularnych nie należy ujmować w cudzysłów w innych miejscach (na przykład we właściwościach reguły LLD).
W karcie Test można testować wyrażenie regularne i jego podwyrażenia, podając ciąg testowy.

Wyniki pokazują stan każdego podwyrażenia oraz łączny stan niestandardowego wyrażenia.
Łączny stan niestandardowego wyrażenia jest określany jako Combined result. Jeśli zdefiniowano kilka podwyrażeń, Zabbix używa operatora logicznego AND do obliczenia Combined result. Oznacza to, że jeśli co najmniej jeden wynik ma wartość False, Combined result 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 zaczynające się od "Software Loopback Interface". |
^lo$ |
"lo" | |
^(In)?[Ll]oop[Bb]ack[0-9._]*$ |
Ciągi, które opcjonalnie zaczynają się od "In", następnie zawierają "L" lub "l", potem "oop", następnie "B" lub "b", potem "ack", po czym opcjonalnie może wystąpić dowolna liczba cyfr, kropek lub podkreśleń. | |
^NULL[0-9.]*$ |
Ciągi zaczynające się od "NULL", opcjonalnie po których może wystąpić dowolna liczba cyfr lub kropek. | |
^[Ll]o[0-9.]*$ |
Ciągi zaczynające się od "Lo" lub "lo" i opcjonalnie po których może wystąpić dowolna liczba cyfr lub kropek. | |
^[Ss]ystem$ |
"System" lub "system" | |
^Nu[0-9.]*$ |
Ciągi zaczynające się od "Nu", opcjonalnie po których może wystąpić 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 takie jak "clr_optimization_v2.0.50727_32" i "clr_optimization_v4.0.30319_32", gdzie zamiast kropek można użyć dowolnego znaku 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 poniższego 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 wbudowanym modyfikatorem wyrażenia regularnego
Użycie poniższego wyrażenia regularnego, w tym wbudowanego modyfikatora (?i), do dopasowania znaków "error":
(?i)error

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

Wybrany typ wyrażenia: "Result is TRUE". Znaki po określonej linii są dopasowywane.
Modyfikator g nie może być określony w linii. Listę dostępnych modyfikatorów można znaleźć 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, 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 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[] | |||||
| Trapy SNMP | |||||
| snmptrap[] | Tak | Tak | Nie | Parametr regexp |
|
| Wstępne przetwarzanie wartości pozycji | Tak | Nie | Nie | Pole pattern |
|
| Funkcje dla wyzwalaczy/obliczanych pozycji | |||||
| 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 Regular expression | |
| Nadpisania | Tak | Nie | W opcjach matches, does not match dla warunków Operation | ||
| Warunki akcji | Tak | Nie | Nie | W opcjach matches, does not match dla warunków automatycznej rejestracji Host name i Host metadata | |
| Skrypty | Tak | Tak | Nie | Pole Input validation rule | |
| Monitorowanie WWW | Tak | Nie | Tak | Variables z prefiksem regex: Pole Required string |
|
| 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 Pattern (dla pozycji tekstowych) | |
| Mapowanie ikon | Tak | Tak | Nie | Pole Expression | |
| Mapowanie wartości | Tak | Nie | Nie | Pole Value, jeśli typ mapowania to regexp |
|
| Parametry konfiguracji agenta | |||||
| AllowKeyRegexp | Tak | Nie | Nie | Wzorzec | |
| DenyKeyRegexp | |||||