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

Обзор

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

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

{$MACRO}

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

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

Иными словами, если макрос не существует для узла сети, 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 в AdministrationGeneralGUI;
  • используйте его в поле When active в UsersUsers, на вкладке Media пользователя;
  • используйте его для настройки более частого опроса элементов данных в рабочие часы:

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

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

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

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

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