2. Пользовательские макросы
Обзор
Пользовательские макросы поддерживаются в Zabbix для достижения большей гибкости, в дополнение к поддерживаемым макросам «из коробки».
Пользовательские макросы можно определить на глобальном уровне, уровне шаблона и уровне узла сети. Такие макросы имеют специальный синтаксис:
{$МАКРОС}
Zabbix раскрывает макросы в соответствии со следующей очерёдностью:
- макросы, назначенные узлу сети (проверяются в первую очередь)
- макросы, назначенные на шаблоны первого уровня узла сети (т.е. шаблоны, присоединённые напрямую к узлу сети), отсортированные по ID шаблона
- макросы, назначенные на шаблоны второго уровня узла сети, отсортированные по ID шаблона
- макросы, назначенные на шаблоны третьего уровня узла сети, отсортированные по ID шаблона, и так далее
- глобальные макросы (проверяются в последнюю очередь)
Иными словами, если макрос не существует непосредственно у узла сети, тогда Zabbix попытается найти его в шаблонах, присоединённых к этому узлу сети, с учётом увеличивающейся глубины шаблонов. Если макрос всё ещё не найден, то будет использован макрос глобального уровня, если он существует.
Если макросы с одинаковыми именами существуют у нескольких присоединённых шаблонов на одном уровне, будет использован макрос из шаблона с наименьшим значением ID. Таким образом, наличие макросов с одинаковыми именами у нескольких шаблонов — это риск конфигурации.
В случае, если Zabbix не удалось найти макрос, макрос не будет раскрыт.
По задумке макросы (включая пользовательские макросы) остаются нераскрытыми в разделе Настройки (например, в списке триггеров), чтобы сделать сложную конфигурацию более прозрачной.
Пользовательские макросы можно использовать в:
- именах элементов данных
- параметрах ключей элементов данных
- интервалах обновления и гибких интервалах элементов данных
- именах и описаниях триггеров
- параметрах и константах выражений триггеров (смотрите примеры)
- многих других местах (смотрите полный список)
Общие случаи использования глобальных макросов и макросов уровня узлов сети
- используйте глобальные макросы в нескольких местах; затем измените значения этих макросов, и изменения настроек применятся во всех местах за «одно нажатие»
- получение преимуществ от шаблонов с уникальными для узлов сети атрибутами: пароли, номера портов, имена файлов, регулярные выражения и т.д.
Рекомендуется использовать макросы узла сети вместо глобальных макросов, поскольку добавление, обновление или удаление глобальных макросов приводит к инкрементальному обновлению конфигурации для всех узлов сети. Для получения дополнительной информацию смотрите разделе Пассивные и активные проверки агента.
Настройка
Для добавления пользовательских макросов, перейдите в соответствующий раздел в веб-интерфейсе:
- для глобальных макросов, посетите Администрирование → Макросы (Administration → Macros)
- для макросов на уровне узлов сети и шаблонов, откройте свойства узла сети или шаблона и найдите вкладку Макросы (Macros)
Пользовательский макрос имеет следующие атрибуты:

| Параметр | Описание |
|---|---|
| Макрос (Macro) |
Имя макроса. Имя должно быть заключено в фигурные скобки и начинаться с символа доллара. Пример: {$FRONTEND_URL}. В именах макросов допускаются следующие символы: A-Z (только в верхнем регистре) , 0-9 , _ , . |
| Значение (Value) |
Значение макроса. Поддерживаются три типа значений: Текст (Text) (по умолчанию) — значение в виде простого текста Скрытый текст (Secret text) — значение маскируется звёздочками Секрет Хранилища (Vault secret) — значение содержит путь/запрос к секрету Хранилища Для изменения типа значения нажмите на кнопку в конце поля ввода значения. Максимальная длина значения пользовательского макроса составляет 2048 символов. |
| Описание (Description) |
Текстовое поле, используемое для предоставления дополнительной информации о макросе. |
При настройке пользовательских макросов обратите внимание на следующие особенности контекстно-зависимого поведения:
- если пользовательские макросы используются в элементах данных или триггерах шаблона, рассмотрите возможность добавления этих макросов к шаблону (даже если они определены глобально); таким образом, макросы типа Текст будут работать так, как ожидается, после экспорта шаблона в XML и импорта в другую систему (значения секретных макросов не экспортируются)
- если пользовательские макросы используются в выражениях триггера, эти макросы будут раскрыты только если они ссылаются на параметр или константу; они НЕ будут раскрыты, если ссылаются на узел сети, ключ элемента данных, функцию, оператор или другое выражение триггера (скрытые макросы нельзя использовать в выражениях триггеров)
- если пользовательские макросы используются на узле сети, который имеет правило низкоуровневого обнаружения с прототипами узла сети, обнаруженные узлы сети унаследуют все пользовательские макросы, определённые на данном узле сети
Примеры
Пример 1
Использование макроса уровня узла сети в ключе элемента данных «Состояние демона SSH»:
net.tcp.service[ssh,{$SSH_PORT}]
Этот элемент данных можно присоединить к нескольким узлам сети, при условии, что значение {$SSH_PORT} указано на этих узлах сети.
Пример 2
Использование макроса уровня узла сети в триггере «Загрузка CPU слишком высокая»:
last(/ca_001/system.cpu.load[,avg1])>{$MAX_CPULOAD}
Такой триггер можно создать на уровне шаблона, а не редактировать на отдельных узлах сети.
Если в качестве параметра функции вы хотите использовать количество значений (например, max(/узел сети/ключ,#3)), добавьте символ решётки (#) непосредственно в значение макроса, например вот так: SOME_PERIOD ⇒ #3
Пример 3
Использование двух макросов в триггере «Загрузка CPU слишком высокая»:
min(/ca_001/system.cpu.load[,avg1],{$CPULOAD_PERIOD})>{$MAX_CPULOAD}
Обратите внимание, что макрос можно использовать как параметр триггерной функции, в данном примере в функции min().
Пример 4
Синхронизация условия недоступности агентов с интервалом обновления элемента данных:
- задайте макрос {$INTERVAL} и используйте его в интервале обновления элемента данных;
- используйте {$INTERVAL} как параметр в триггере на недоступность агента:
nodata(/ca_001/agent.ping,{$INTERVAL})=1
Пример 5
Централизованная настройка рабочего времени:
- создайте глобальный макрос {$WORKING_HOURS}, равный значению
1-5,09:00-18:00; - используйте его в поле Рабочее время (Working time) в разделе Администрирование → Общие → Веб-интерфейс (Administration → General →GUI);
- используйте его в поле Когда активно (When active) в Пользователи → Пользователи (Users → Users), вкладка пользователя Оповещения (Media);
- используйте его для настройки более частого опроса элементов данных в течение рабочего времени:

- используйте его в условии действия Период времени (Time period);
- измените рабочее время в Администрирование → Макросы (Administration → Macros) при необходимости.
Пример 6
Используйте макрос прототипа узлов сети для настройки элементов данных у обнаруженных узлов сети:
- на уровне прототипа узлов сети задайте пользовательский макрос {$SNMPVALUE} с значением в виде макроса низкоуровневого обнаружения}:

- назначьте шаблон Generic SNMPv2 на прототип узлов сети;
- используйте {$SNMPVALUE} в поле SNMP OID элементов данных шаблона Generic SNMPv2.
Контекст пользовательских макросов
Смотрите пользовательские макросы с контекстом.