3 Пользовательские макросы с контекстом
Обзор
В пользовательских макросах можно использовать опциональный контекст, позволяющий переопределять значение по умолчанию на значение с учётом конкретной ситуации.
Контекст добавляется к имени макроса; синтаксис зависит от того, является ли контекст статичным текстовым значением:
{$MACRO:"статичный текст"}
или регулярным выражением (поддерживается с Zabbix 5.0.2):
{$MACRO:regex:"регулярное выражение"}
Обратите внимание, что макрос с контекстом регулярного выражения может
быть определен только в пользовательской конфигурации макроса. Если
префикс regex: используется где-либо еще как пользовательский
макрос-контекст, как в выражении триггера, он будет рассматриваться как
статический контекст.
Заключение контекста в кавычки опционально (см. также примечания).
Примеры макросов с контекстом:
| Пример | Описание |
|---|---|
{$LOW_SPACE_LIMIT} |
Пользовательский макрос без контекста. |
{$LOW_SPACE_LIMIT:/tmp} |
Пользовательский макрос с контекстом (статичная строка). |
{$LOW_SPACE_LIMIT:regex:"^/tmp$"} |
Пользовательский макрос с контекстом (регулярное выражение). Одинаково с {$LOW_SPACE_LIMIT:/tmp}. |
{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"} |
Пользовательский макрос с контекстом (регулярное выражение). Соответствует всем строкам с префиксом /var/log/. |
Примеры использования
Пользовательские макросы с контекстом могут быть определены для достижения более гибких порогов в выражениях триггера (на основе значений, полученных при низкоуровневом обнаружении). Например, вы можете определить следующие макросы:
- {$LOW_SPACE_LIMIT} = 10
- {$LOW_SPACE_LIMIT:/home} = 20
- {$LOW_SPACE_LIMIT:regex:"\^\/[a-z]+$"} = 30
Затем низкоуровневый макрос обнаружения может использоваться в качестве контекста макроса в прототипе триггера для обнаружения примонтированной файловой системы:
{host:vfs.fs.size[{#FSNAME},pfree].last()}<{$LOW_SPACE_LIMIT:"{#FSNAME}"
После обнаружения в триггерах будут применяться разные пороговые значения для свободного места в зависимости от обнаруженных точек монтирования или типов файловой системы. Проблемные события будут сгенерированы, если:
- У папки /home имеется менее 20% свободного дискового пространства
- У папок, соответствующих шаблону регулярных выражений (например, /etc, /tmp или /var), менее 30% свободного дискового пространства
- Папки, которые не соответствуют шаблону регулярного выражения и не /home, имеют менее 10% свободного дискового пространства
Примечания
- Если существует более одного пользовательского макроса с контекстом, Zabbix попытается сначала сопоставить простые контекстные макросы, а затем контекстные макросы с регулярными выражениями в неопределенном порядке.
Не создавайте разные контекстные макросы, соответствующие одной и той же строке, чтобы избежать неопределенного поведения.
- Если макрос с его контекстом не найден на хосте, связанных шаблонах или глобально, то выполняется поиск макроса без контекста.
- Только макросы низкоуровневого обнаружения могут использоваться как контекст. Любые другие макросы игнорируются и рассматриваются как простой текст.
Технически, контекст макроса задается с использованием правил, похожих
на параметры ключей элементов
данных, за исключением того, что
контекст макроса при наличии , символа не обрабатывается как несколько
параметров:
- Контекст макроса необходимо заключать в
"кавычки, если контекст содержит}символ или начинается с"символа. Кавычки внутри заключенном в кавычки контексте необходимо экранировать при помощи\символа. Сам символ\не экранируется, что означает, что невозможно задать заключенный в кавычки контекст оканчивающийся на\символ - макрос{$MACRO:"a:\b\c\"}ошибочный - Пробелы в начале контекста игнорируются, пробелы в конце не
игнорируются. Например,
{$MACRO:A}тоже самое что и{$MACRO: A}, но не{$MACRO:A }. - Все пробелы до кавычек в начале и после кавычек игнорируются, но все
пробелы внутри кавычек не игнорируются. Макросы
{$MACRO:"A"},{$MACRO: "A"},{$MACRO:"A" }и{$MACRO: "A" }одинаковы, но макрос{$MACRO:"A"}и{$MACRO:" A "}не одинаковы.
Следующие макросы одинаковы, так как имеют один и тот же контекст:
{$MACRO:A}, {$MACRO: A} и {$MACRO:"A"}. Такое поведение отлично
от ключей элементов данных, где key[a], key[ a] и key["a"]
одинаковы семантически, но различны для критерия уникальности.