В пользовательских макросах можно использовать опциональный контекст, позволяющий переопределять значение по умолчанию на значение с учётом конкретной ситуации.
Контекст добавляется к имени макроса; синтаксис зависит от того, является ли контекст статичным текстовым значением:
или регулярным выражением (поддерживается с 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"] одинаковы семантически, но различны для критерия уникальности.