В пользовательских макросах можно использовать опциональный контекст, позволяющий переопределять значение по умолчанию на значение с учётом конкретной ситуации.
Контекст добавляется к имени макроса; синтаксис зависит от того, является ли контекст статичным текстовым значением:
или регулярным выражением (поддерживается с Zabbix 5.0.2):
Обратите внимание, что макрос с контекстом регулярного выражения может быть определен только в пользовательской конфигурации макроса. Если префикс 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/. |
Пользовательские макросы с контекстом могут быть определены для достижения более гибких порогов в выражениях триггера (на основе значений, полученных при низкоуровневом обнаружении). Например, вы можете определить следующие макросы:
Затем низкоуровневый макрос обнаружения может использоваться в качестве контекста макроса в прототипе триггера для обнаружения примонтированной файловой системы:
После обнаружения в триггерах будут применяться разные пороговые значения для свободного места в зависимости от обнаруженных точек монтирования или типов файловой системы. Проблемные события будут сгенерированы, если:
Не создавайте разные контекстные макросы, соответствующие одной и той же строке, чтобы избежать неопределенного поведения.
Технически, контекст макроса задается с использованием правил, похожих на параметры ключей элементов данных, за исключением того, что контекст макроса при наличии ,
символа не обрабатывается как несколько параметров:
"
кавычки, если контекст содержит }
символ или начинается с "
символа. Кавычки внутри заключенном в кавычки контексте необходимо экранировать при помощи \
символа. Сам символ \
не экранируется, что означает, что невозможно задать заключенный в кавычки контекст оканчивающийся на \
символ - макрос {$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"]
одинаковы семантически, но различны для критерия уникальности.