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

Обзор

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

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

{$MACRO}

Zabbix разрешает макросы в соответствии со следующим приоритетом:

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

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

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

Если Zabbix не удается найти макрос, макрос не будет разрешен.

Макросы (включая пользовательские макросы) намеренно остаются неразрешенными в разделе Конфигурация (например, в списке триггеров), чтобы сделать сложную конфигурацию более прозрачной.

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

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

Рекомендуется использовать макросы узла сети вместо глобальных макросов, поскольку добавление, обновление или удаление глобальных макросов приводит к инкрементальному обновлению конфигурации для всех узлов сети. Дополнительную информацию см. в разделе Пассивные и активные проверки агента.

Конфигурация

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

  • Для глобальных макросов откройте Администрирование > Макросы.
  • Для макросов уровня узла сети и шаблона откройте свойства узла сети или шаблона и найдите вкладку Макросы.

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

Parameter Description
Macro Имя макроса. Имя должно быть заключено в фигурные скобки и начинаться со знака доллара.
Пример: {$FRONTEND_URL}. В именах макросов допускаются следующие символы: A-Z (только заглавные) , 0-9 , _ , .
Value Значение макроса. Поддерживаются три типа значений:
Text (по умолчанию) - обычное текстовое значение
Secret text - значение скрывается звездочками
Vault secret - значение содержит путь/запрос к vault secret.

Чтобы изменить тип значения, нажмите кнопку в конце поля ввода значения.

Максимальная длина значения пользовательского макроса — 2048 символов.
Description Текстовое поле, используемое для предоставления дополнительной информации об этом макросе.

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

  • если пользовательские макросы используются в элементах данных или триггерах шаблона, рекомендуется добавить эти макросы также в шаблон (даже если они определены глобально); в этом случае макросы типа Text будут работать ожидаемым образом после экспорта шаблона в XML и импорта в другую систему (значения секретных макросов не экспортируются)
  • если пользовательские макросы используются в выражениях триггеров, такие макросы будут подставляться только при ссылке на параметр или константу; они НЕ будут подставляться при ссылке на узел сети, ключ элемента данных, функцию, оператор или другое выражение триггера (секретные макросы нельзя использовать в выражениях триггеров)
  • если пользовательские макросы используются на узле сети, для которого есть правило низкоуровневого обнаружения с прототипами узлов сети, обнаруженные узлы сети унаследуют все пользовательские макросы, определенные на этом узле сети

Примеры

Пример 1

Использование макроса уровня узла сети в ключе элемента данных "Status of SSH daemon":

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;
  • используйте его в поле Рабочее время в Администрирование > Общие > GUI;
  • используйте его в поле Когда активно в Пользователи > Пользователи, на вкладке Медиа пользователя;
  • используйте его для настройки более частой проверки элементов данных в рабочее время:

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

Используйте макрос прототипа узлов сети для настройки элементов данных у обнаруженных узлов сети:

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

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

Смотрите пользовательские макросы с контекстом.