Sidebar

ru:manual:config:macros:usermacros

2 Пользовательские макросы

Обзор

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

Пользовательские макросы можно определить на глобальном уровне, уровне шаблона и уровне узла сети. Такие макросы имеют специальный синтаксис:

{$МАКРОС}

Zabbix раскрывает макросы в соответствии со следующей очередностью:

  1. макрос, назначенный узлу сети (проверяется в первую очередь)
  2. макрос, назначенный на первый уровень шаблонов у узла сети (т.е. шаблоны присоединенные напрямую к узлу сети), которые отсортированы по ID шаблона
  3. макрос, назначенный на второй уровень шаблонов у узла сети, которые отсортированы по ID шаблона
  4. макрос назначенный на третий уровень шаблонов у узла сети, которые отсортированы по ID шаблона и так далее
  5. глобальные макросы (проверяются в последнюю очередь)

Иными словами, если макрос не существует непосредственно у узла сети, тогда Zabbix попытается найти его в шаблонах, присоединенных к этому узлу сети, с учетом увеличивающейся глубины шаблонов. Если макрос все еще не найден, то будет использован макрос глобального уровня, если он существует.

В случае, если Zabbix не удалось найти макрос, макрос не будет раскрыт.

Пользовательские макросы можно использовать в:

  • именах элементов данных
  • в параметрах ключей элементов данных
  • в интервалах обновления и гибких интервалах элементов данных
  • именах и описаниях триггеров
  • в параметрах и константах выражений триггеров (смотрите примеры)
  • многих других местах (смотрите Макросы поддерживаемые по назначению)
Общие случаи использования глобальных макросов и макросов уровня узлов сети
  • используйте глобальные макросов в нескольких местах; затем измените значения макроса и изменения конфигурации применятся во всех местах за “одно нажатие”
  • получение преимуществ шаблонов со специфичными для узлов сети атрибутами: пароли, номера портов, имена файлов, регулярные выражения, и т.д.

Настройка

Для добавления пользовательских макросов, перейдите в соответствующие разделы в веб-интерфейсе:

  • для глобальных макросов, посетите Администрирование → Общие → Макросы
  • для макросов на уровне узлов сети и шаблонов, откройте свойства узла сети или шаблона и найдите вкладку Макросы
Если пользовательский макрос используется в элементах данных или триггерах шаблона, то предлагается добавить этот макрос к шаблону, даже если он задан на глобальном уровне. Таким образом при экспорте шаблона в XML и импорте его в другую систему элементы данных и триггеры продолжат работать, как это и ожидалось.

Пользовательский макрос имеет следующие атрибуты:

ПараметрОписание
Макрос Имя макроса в фигурных скобках. Текст в скобках должен начинаться со знака доллара. Пример: {$FRONTEND_URL}. В именах макросов допускаются следующие символы: A-Z (только заглавные буквы), 0-9, _, .
Значение Содержимое макроса. Начиная с Zabbix 5.0, в пользовательских макросах поддерживаются два типа значений: Текст (по умолчанию) и Скрытый текст. Режим скрытого текста маскирует содержимое макроса звездочками, что может быть полезно для защиты конфиденциальной информации, такой как пароли или общие ключи.

Чтобы выбрать тип значения макроса, нажмите кнопку в правом конце поля Значение:

буква Т обозначает текстовый макрос

значок замка указывает на режим скрытого текста. При наведении курсора на маску текста, поле преобразуется в кнопку Задать новое значение, позволяющую ввести новое значение макроса без доступа к старому (чтобы выйти без сохранения нового значения, нажмите иконку обратной стрелки в конце поля
Описание Текстовое поле, используемое для предоставления дополнительной информации об этом макросе.

Примеры

Пример 1

Использование макроса в ключе элемента данных “Состояние демона SSH”:

net.tcp.service[ssh,{$SSH_PORT}]

Этот элемент данных можно присоединить к нескольким узлам сети, при условии, что значение {$SSH_PORT} указано на этих узлах сети.

Пример 2

Использование макроса уровня узла сети в триггере “Загрузка CPU слишком высокая”:

{ca_001:system.cpu.load[,avg1].last()}>{$MAX_CPULOAD}

Такой триггер можно создать у шаблона, он не будет изменен у отдельных узлов сети.

Если вы хотите использовать количество значений в качестве параметра функции (например, max(#3)), добавьте символ решетки # непосредственно в значение макроса, например вот так: SOME_PERIOD ⇒ #3
Пример 3

Использование двух макросов в триггере “Загрузка CPU слишком высокая”:

{ca_001:system.cpu.load[,avg1].min({$CPULOAD_PERIOD})}>{$MAX_CPULOAD}

Заметьте, что макрос можно использовать в качестве параметра в функциях триггеров, в этом примере в функции min().

Пользовательские макросы будут раскрыты в триггерах, если макросы используются в параметрах или как константы. Они НЕ будут раскрыты, если используются как ссылка на функции, имена узлов сети, ключи элементов данных или операторы.
Пример 4

Синхронизация условия недоступности агентов с интервалом обновления элемента данных:

  • задайте макрос {$INTERVAL} и используйте его в интервале обновления элемента данных;
  • используйте {$INTERVAL} параметром в триггере на недоступность агента:

{ca_001:agent.ping.nodata({$INTERVAL})}=1

Пример 5

Централизация конфигурации рабочего времени:

  • создайте глобальный макрос {$WORKING_HOURS} равный 1-5,09:00-18:00;
  • используйте его в АдминистрированиеОбщиеРабочее время;
  • используйте его в ПользовательОповещенияКогда активно;
  • используйте его для настройки более частого опроса элементов данных в течении рабочего времени:

  • используйте его в условии действия Период времени;
  • отредактируйте рабочее время в АдминистрированиеОбщиеМакросы, если требуется.

Контекст пользовательских макросов