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

| Параметр | Описание |
|---|---|
| Macro | Имя макроса. Имя должно быть заключено в фигурные скобки и начинаться со знака доллара. Пример: {$FRONTEND_URL}. В именах макросов допускаются следующие символы: A-Z (только верхний регистр), 0-9, _, . |
| Value | Значение макроса. Поддерживаются три типа значений: Text (по умолчанию) — текстовое значение Secret text — значение маскируется звездочками Vault secret — значение содержит путь/запрос к vault secret. Чтобы изменить тип значения, нажмите кнопку в конце поля ввода значения. Максимальная длина значения пользовательского макроса — 2048 символов. |
| Description | Текстовое поле, используемое для предоставления дополнительной информации об этом макросе. |
При настройке пользовательских макросов обратите внимание на следующие особенности поведения в зависимости от контекста:
- если пользовательские макросы используются в элементах данных или триггерах шаблона, рекомендуется также добавить эти макросы в шаблон (даже если они определены глобально); в этом случае макросы типа Text будут работать ожидаемым образом после экспорта шаблона в XML и импорта в другую систему (значения секретных макросов не экспортируются)
- если пользовательские макросы используются в выражениях триггеров, эти макросы будут разрешаться только при ссылке на параметр или константу; они НЕ будут разрешаться при ссылке на узел сети, ключ элемента данных, функцию, оператор или другое выражение триггера (секретные макросы нельзя использовать в выражениях триггеров)
- если пользовательские макросы используются на узле сети, у которого есть правило low-level discovery с прототипами узлов сети, обнаруженные узлы сети унаследуют все пользовательские макросы, определенные на этом узле сети)
Примеры
Пример 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} с значением в виде {#SNMPVALUE} макроса низкоуровневого обнаружения:

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