10 Регулярные выражения
Обзор
Zabbix поддерживает Perl совместимые регулярные выражения (PCRE, PCRE2).
Имеется два варианта использования регулярных выражений в Zabbix:
- ввод регулярных выражений вручную
- использование глобальных регулярных выражений, созданных в Zabbix
Регулярные выражения
В поддерживаемых местах вы можете вручную ввести регулярное выражение. Обратите внимание, что выражение не может начинаться с @, поскольку этот символ используется в Zabbix для ссылки на глобальные регулярные выражения.
При использовании регулярных выражений возможно исчерпание памяти стека. Подробнее см. в PCRE PERFORMANCE.
Обратите внимание, что при сопоставлении в многострочном режиме якоря ^ и $ соответствуют началу/концу каждой строки соответственно, а не началу/концу всей строки.
См. также примеры правильного экранирования в различных контекстах.
Глобальные регулярные выражения
В веб-интерфейсе Zabbix есть расширенный редактор для создания и тестирования сложных регулярных выражений.
После того как регулярное выражение создано таким способом, его можно использовать в нескольких местах веб-интерфейса, обращаясь к нему по имени с префиксом @, например, \@mycustomregexp.
Чтобы создать глобальное регулярное выражение:
- Перейдите в: Administration > General
- Выберите Regular expressions в выпадающем списке
- Нажмите New regular expression
Вкладка Expressions позволяет задать имя регулярного выражения и добавить подвыражения.

Все обязательные поля ввода отмечены красной звездочкой.
| Parameter | Description | |
|---|---|---|
| Name | Задайте имя регулярного выражения. Допускаются любые символы Unicode. | |
| Expressions | Нажмите Add в блоке Expressions, чтобы добавить новое подвыражение. | |
| Expression type | Выберите тип выражения: Character string included - совпадение с подстрокой Any character string included - совпадение с любой подстрокой из списка, разделенного разделителем. В качестве разделителя используются запятая (,), точка (.) или косая черта (/). Character string not included - совпадение с любой строкой, кроме подстроки Result is TRUE - совпадение с регулярным выражением Result is FALSE - не совпадать с регулярным выражением |
|
| Expression | Введите подстроку/регулярное выражение. | |
| Delimiter | Запятая (,), точка (.) или косая черта (/) для разделения текстовых строк в регулярном выражении. Этот параметр активен только при выборе типа выражения "Any character string included". | |
| Case sensitive | Флажок, указывающий, чувствительно ли регулярное выражение к регистру букв. | |
Косая черта (/) в выражении воспринимается буквально, а не как разделитель. Таким образом можно сохранять выражения, содержащие косую черту, без ошибок.
Пользовательское имя регулярного выражения в Zabbix может содержать запятые, пробелы и т. д.
В тех случаях, когда это может привести к неверному толкованию при использовании ссылки на него (например, запятая в параметре ключа элемента данных), всю ссылку можно заключить в кавычки, например: "\@My custom regexp for purpose1, purpose2".
Имена регулярных выражений не должны заключаться в кавычки в других местах (например, в свойствах правила LLD).
На вкладке Test регулярное выражение и его подвыражения можно проверить, указав тестовую строку.

Результаты показывают статус каждого подвыражения и общий статус пользовательского выражения.
Общий статус пользовательского выражения определяется как Combined result. Если определено несколько подвыражений, Zabbix использует логический оператор AND для вычисления Combined result. Это означает, что если хотя бы один Result имеет значение False, то Combined result также будет иметь статус False.
Глобальные регулярные выражения по умолчанию
Zabbix поставляется с несколькими глобальными регулярными выражениями в своем наборе данных по умолчанию.
| Имя | Выражение | Соответствие |
|---|---|---|
| File systems for discovery | ^(btrfs|ext2|ext3|ext4|jfs|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|refs|apfs|ntfs|fat32|zfs)$ |
«btrfs» или «ext2» или «ext3» или «ext4» или «jfs» или «reiser» или «xfs» или «ffs» или «ufs» или «jfs» или «jfs2» или «vxfs» или «hfs» или «refs» или «apfs» или «ntfs» или «fat32» или «zfs» |
| Network interfaces for discovery | ^Software Loopback Interface |
Строки, начинающиеся с «Software Loopback Interface». |
^lo$ |
«lo» | |
^(In)?[Ll]oop[Bb]ack[0-9._]*$ |
Строки, которые необязательно начинаются с «In», затем имеют «L» или «l», затем «oop», затем «B» или «b», затем «ack», за которыми может следовать любое количество цифр, точек или символов подчёркивания. | |
^NULL[0-9.]*$ |
Строки, начинающиеся с «NULL», за которыми может следовать любое количество цифр или точек. | |
^[Ll]o[0-9.]*$ |
Строки, начинающиеся с «Lo» или «lo», за которыми может следовать любое количество цифр или точек. | |
^[Ss]ystem$ |
«System» или «system» | |
^Nu[0-9.]*$ |
Строки, начинающиеся с «Nu», за которым может следовать любое количество цифр или точек. | |
| Storage devices for SNMP discovery | ^(Physical memory|Virtual memory|Memory buffers|Cached memory|Swap space)$ |
«Physical memory» или «Virtual memory» или «Memory buffers» или «Cached memory» или «Swap space» |
| Windows service names for discovery | ^(MMCSS|gupdate|SysmonLog|clr_optimization_v2.0.50727_32|clr_optimization_v4.0.30319_32)$ |
«MMCSS» или «gupdate» или «SysmonLog» или строки наподобие «clr_optimization_v2.0.50727_32» и «clr_optimization_v4.0.30319_32», где вместо точек можно поместить любой символ, за исключением перевода строки. |
| Windows service startup states for discovery | ^(automatic|automatic delayed)$ |
«automatic» или «automatic delayed» |
Примеры
Пример 1
Использование следующего регулярного выражения в LLD для обнаружения баз данных не будет принимать во внимание базу данных с заданным именем:
^TESTDATABASE$

Выбран Тип выражения: «Результат ЛОЖЬ». Не соответствует имени, содержащему строку «TESTDATABASE».
Пример с использованием inline модификатора регулярного выражения
Использование следующего регулярного выражения, которое включает inline модификатор (?i) для поиска соответствия символов «error»:
(?i)error

Выбран Тип выражения: «Результат ИСТИНА». Есть соответствие по символам «error».
Другой пример с использованием inline модификатора регулярного выражения
Использование следующего регулярного выражения, которое включает несколько inline модификаторов для поиска соответствия символов после указанной строки:
(?<=match (?i)everything(?-i) after this line\n)(?sx).*# мы добавили s модификатор, чтобы разрешить . соответствие символам перевода строки

Выбран Тип выражения: «Результат ИСТИНА». Символы после указанной строки совпадают.
Модификатор g нельзя указывать в строке. Список доступных модификаторов можно найти на странице помощи по pcresyntax [en]. Для получения более подробной информации о синтаксисе PCRE, пожалуйста, обратитесь к PCRE HTML документации [en].
Поддержка регулярных выражений по расположению
| Расположение | Регулярное выражение | Глобальное регулярное выражение | Многострочное сопоставление | Комментарии | |
|---|---|---|---|---|---|
| Элементы данных агента | |||||
| eventlog[] | Yes | Yes | Yes | параметры regexp, severity, source, eventid |
|
| eventlog.count[] | параметры regexp, severity, source, eventid |
||||
| log[] | параметр regexp |
||||
| log.count[] | |||||
| logrt[] | Yes/No | параметр regexp поддерживает оба варианта, параметр file_regexp поддерживает только неглобальные выражения |
|||
| logrt.count[] | |||||
| proc.cpu.util[] | No | No | параметр cmdline |
||
| proc.get[] | |||||
| proc.mem[] | |||||
| proc.num[] | |||||
| sensor[] | параметры device и sensor в Linux 2.4 |
||||
| system.hw.macaddr[] | параметр interface |
||||
| system.sw.packages[] | параметр regexp |
||||
| system.sw.packages.get[] | параметр regexp |
||||
| vfs.dir.count[] | параметры regex_incl, regex_excl, regex_excl_dir |
||||
| vfs.dir.get[] | параметры regex_incl, regex_excl, regex_excl_dir |
||||
| vfs.dir.size[] | параметры regex_incl, regex_excl, regex_excl_dir |
||||
| vfs.file.regexp[] | Yes | параметр regexp |
|||
| vfs.file.regmatch[] | |||||
| web.page.regexp[] | |||||
| SNMP traps | |||||
| snmptrap[] | Yes | Yes | No | параметр regexp |
|
| Предобработка значений элемента данных | Yes | No | No | параметр pattern |
|
| Функции для триггеров/расчетных элементов данных | |||||
| count() | Yes | Yes | Yes | параметр pattern, если параметр operator имеет значение regexp или iregexp |
|
| countunique() | Yes | Yes | |||
| find() | Yes | Yes | |||
| logeventid() | Yes | Yes | No | параметр pattern |
|
| logsource() | |||||
| Низкоуровневое обнаружение | |||||
| Фильтры | Yes | Yes | No | поле Regular expression | |
| Переопределения | Yes | No | в параметрах matches, does not match для условий Operation | ||
| Условия действий | Yes | No | No | в параметрах matches, does not match для условий автрорегистрации Host name и Host metadata | |
| Скрипты | Yes | Yes | No | поле Input validation rule | |
| Веб-мониторинг | Yes | No | Yes | Variables с префиксом regex: поле Required string |
|
| Контекст пользовательского макроса | Yes | No | No | в контексте макроса с префиксом regex: | |
| Функции макросов | |||||
| regsub() | Yes | No | No | параметр pattern |
|
| iregsub() | |||||
| Индикаторы ссылок на картах | Yes | No | No | поле Pattern (для текстовых элементов данных) | |
| Сопоставление значков | Yes | Yes | No | поле Expression | |
| Сопоставление значений | Yes | No | No | поле Value, если тип сопоставления — regexp |
|