12. Регулярные выражения

Обзор

Perl Compatible Regular Expressions (PCRE, PCRE2) поддерживаются в Zabbix.

В Zabbix есть два способа использования регулярных выражений:

  • вручную ввести регулярное выражение
  • использовать глобальное регулярное выражение, созданное в Zabbix

Регулярные выражения

Вы можете вручную ввести регулярное выражение в поддерживаемых местах. Обратите внимание, что выражение не может начинаться с @, поскольку этот символ используется в Zabbix для ссылки на глобальные регулярные выражения.

При использовании регулярных выражений возможно исчерпание памяти стека. Дополнительные сведения см. в PCRE PERFORMANCE.

Обратите внимание, что при сопоставлении в многострочном режиме якоря ^ и $ соответствуют началу и концу каждой строки соответственно, а не началу и концу всей строки.

См. также примеры правильного экранирования в различных контекстах.

Глобальные регулярные выражения

В веб-интерфейсе Zabbix доступен расширенный редактор для создания и тестирования сложных регулярных выражений.

После создания регулярного выражения таким способом его можно использовать в нескольких местах веб-интерфейса, ссылаясь на его имя с префиксом @, например, @mycustomregexp.

Чтобы создать глобальное регулярное выражение:

  • Перейдите в раздел: Администрирование > Общее
  • В раскрывающемся списке выберите Регулярные выражения
  • Нажмите Новое регулярное выражение

На вкладке Выражения можно задать имя регулярного выражения и добавить подвыражения.

Все обязательные поля отмечены красной звездочкой.

Параметр Описание
Имя Задайте имя регулярного выражения. Разрешены любые символы Unicode.
Выражения Нажмите Добавить в блоке «Выражения», чтобы добавить новое подвыражение.
Тип выражения Выберите тип выражения:
Содержит строку символов — соответствует подстроке
Содержит любую строку символов — соответствует любой подстроке из списка с разделителями. В качестве разделителя в списке можно использовать запятую (,), точку (.) или косую черту (/).
Не содержит строку символов — соответствует любой строке, кроме подстроки
Результат ИСТИНА — соответствует регулярному выражению
Результат ЛОЖЬ — не соответствует регулярному выражению
Выражение Введите подстроку или регулярное выражение.
Разделитель Запятая (,), точка (.) или косая черта (/) для разделения текстовых строк в регулярном выражении. Этот параметр активен только при выборе типа выражения «Содержит любую строку символов».
С учетом регистра Флажок, указывающий, учитывается ли регистр букв в регулярном выражении.

Косая черта (/) в выражении обрабатывается буквально, а не как разделитель. Таким образом, можно сохранять выражения, содержащие косую черту, без ошибок.

Имя пользовательского регулярного выражения в Zabbix может содержать запятые, пробелы и другие символы. В случаях, когда это может привести к неправильной интерпретации при ссылке (например, запятая в параметре ключа элемента данных), всю ссылку можно заключить в кавычки, например: "@My custom regexp for purpose1, purpose2".
В других местах имена регулярных выражений не следует заключать в кавычки (например, в свойствах правил LLD).

На вкладке Тест можно протестировать регулярное выражение и его подвыражения, указав тестовую строку.

В результатах отображается состояние каждого подвыражения и общее состояние пользовательского выражения.

Общее состояние пользовательского выражения определяется как Общий результат. Если задано несколько подвыражений, Zabbix использует логический оператор AND для вычисления Общего результата. Это означает, что если хотя бы один результат имеет значение «ЛОЖЬ», Общий результат также будет иметь состояние «ЛОЖЬ».

Регулярные выражения по умолчанию для глобальных правил

Zabbix поставляется с несколькими глобальными регулярными выражениями в наборе данных по умолчанию.

Name Expression Matches
Файловые системы для обнаружения ^(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"
Сетевые интерфейсы для обнаружения ^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", за которыми необязательно следует любое количество цифр или точек.
Устройства хранения для обнаружения по SNMP ^(Physical memory|Virtual memory|Memory buffers|Cached memory|Swap space)$ "Physical memory" или "Virtual memory" или "Memory buffers" или "Cached memory" или "Swap space"
Имена служб Windows для обнаружения ^(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 для обнаружения ^(automatic|automatic delayed)$ "automatic" или "automatic delayed"

Примеры

Пример 1

Использование следующего выражения в низкоуровневом обнаружении для обнаружения баз данных, кроме базы данных с определенным именем:

^TESTDATABASE$

regexp\_expr\_2.png

Выбранный тип выражения: "Результат — FALSE". Не соответствует имени, содержащему строку "TESTDATABASE".

Пример с модификатором регулярного выражения в строке

Использование следующего регулярного выражения, включая встроенный модификатор (?i), для сопоставления символов "error":

(?i)error

regexp\_expr\_3a.png

Выбранный тип выражения: "Результат — TRUE". Символы "error" сопоставляются.

Еще один пример с модификатором регулярного выражения в строке

Использование следующего регулярного выражения, включая несколько встроенных модификаторов, для сопоставления символов после определенной строки:

(?<=match (?i)everything(?-i) after this line\n)(?sx).*# we add s modifier to allow . match newline characters

regexp\_expr\_4\_new.png

Выбранный тип выражения: "Result is TRUE". Символы после определенной строки сопоставляются.

Модификатор g нельзя указать в строке. Список доступных модификаторов можно найти на странице man pcresyntax. Дополнительные сведения о синтаксисе PCRE см. в HTML-документации PCRE.

Поддержка регулярных выражений по расположению

Расположение Регулярное выражение Глобальное регулярное выражение Многострочное сопоставление Комментарии
Элементы данных агента
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()
Низкоуровневое обнаружение
Filters Yes Yes No поле Regular expression
Overrides 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