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

Обзор

Пользовательские макросы поддерживаются в 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

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

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

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

Пример 2

Использование макроса уровня узла сети в триггере «Слишком высокая загрузка ЦП»:

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

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

Если вы хотите использовать количество значений в качестве параметра функции (например, max(/host/key,#3)), включите знак решетки в определение макроса следующим образом: SOME_PERIOD => #3.

Пример 3

Использование двух макросов в триггере «Слишком высокая загрузка ЦП»:

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

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

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

  1. В прототипе узла сети определите пользовательский макрос {$SNMPVALUE}, указав в качестве значения макрос обнаружения низкого уровня {#SNMPVALUE}:

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

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

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