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

Обзор

Zabbix поддерживает Perl совместимые регулярные выражения (PCRE, PCRE2).

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

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

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

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

Имеется вероятность выхода за рамки стека при использовании регулярных выражений. Для получения более подробной информации смотрите страницу помощи pcrestack.

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

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

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

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

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

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

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

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

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

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

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

В Zabbix имя пользовательского регулярного выражения может содержать запятые, пробелы и т.п. В этих случаях, там, где имеется вероятность неверной интерпретации при использовании ссылки (например, запятая в параметре ключа элемента данных) нужно всю ссылку заключить в кавычки, вот таким образом: "@Моё выражение для цели1, цели2".
В других местах (например, в свойствах LLD правил) имена регулярных выражений нельзя заключать в кавычки.

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

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

Состояние всего пользовательского выражения определяется как Комбинированный результат. Если задано несколько подвыражений, то, чтобы вычислить Комбинированный результат, Zabbix использует логический оператор И (AND). Это означает, что если хотя бы один Результат даёт ЛОЖЬ, то Комбинированный результат также будет иметь состояние ЛОЖЬ.

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

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$

regexp_expr_2.png

Выбран Тип выражения: "Результат ЛОЖЬ". Не соответствует имени, содержащему строку "TESTDATABASE".

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

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

(?i)error

regexp_expr_3a.png

Выбран Тип выражения: "Результат ИСТИНА". Есть соответствие по символам "error".

Другой пример с использованием inline модификатора регулярного выражения

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

(?<=match (?i)everything(?-i) after this line\n)(?sx).*# мы добавили s модификатор, чтобы разрешить . соответствие символам перевода строки

regexp_expr_4_new.png

Выбран Тип выражения: "Результат ИСТИНА". Символы после указанной строки совпадают.

Модификатор g нельзя указывать в строке. Список доступных модификаторов можно найти на странице помощи по pcresyntax [en]. Для получения более подробной информации о синтаксисе PCRE, пожалуйста, обратитесь к PCRE HTML документации [en].

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

Назначение Регулярное выражение Глобальное регулярное выражение Многострочное совпадение Комментарии
Элементы данных агента
eventlog[] Да Да Да Параметры регулярное выражение, важность, источник, eventid
log[] Параметр регулярное выражение
log.count[]
logrt[] Да/Нет Параметр регулярное выражение поддерживает оба варианта, параметр регулярное_выражение_файла поддерживает только не глобальные выражения
logrt.count[]
proc.cpu.util[] Нет Нет Параметр cmdline
proc.mem[]
proc.num[]
sensor[] Параметры устройство и сенсор в Linux 2.4
system.hw.macaddr[] Параметр интерфейс
system.sw.packages[] Параметр регулярное выражение
vfs.dir.count[] Параметры regex_вкл и regex_искл
vfs.dir.get[] Параметры regex_вкл, regex_искли <regex_искл_директории>
vfs.dir.size[] Параметры regex_вкл и regex_искл
vfs.file.regexp[] Да Параметр регулярное выражение
vfs.file.regmatch[]
web.page.regexp[]
SNMP трапы
snmptrap[] Да Да Нет Параметр регулярное выражение
Предобработка значений элементов данных Да Нет Нет Параметр шаблон
Функции триггеров / вычисляемых элементов данных
count() Да Да Да Параметр шаблон, если параметр оператор равен regexp или iregexp
countunique() Да Да
find() Да Да
logeventid() Да Да Нет Параметр шаблон
logsource()
Низкоуровневое обнаружение
Фильтры Да Да Нет Поле Регулярное выражение
Замещения Да Нет В опциях совпадает, не соответствует условий Операций
Условия действий Да Нет Нет В опциях совпадает, не соответствует условий Имя узла сети и Метаданные узлов сети авторегистрации
Веб-мониторинг Да Нет Нет Переменные с префиксом regex:
Поле Требуемая строка
Контекст пользовательских макросов Да Нет Нет В контексте макросов с префиксом regex:
Функции макросов
regsub() Да Нет Нет Параметр шаблон
iregsub()
Соответствие иконок Да Да Нет Поле Выражение
Преобразования значений Да Нет Нет Поле Значение, если тип поиска соответствия - regexp