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

Обзор

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

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

{$МАКРОС}

Zabbix раскрывает макросы в соответствии со следующей очерёдностью:

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

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

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

В случае, если Zabbix не удалось найти макрос, макрос не будет раскрыт.

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

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

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

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

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

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

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

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

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

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

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

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

  • если пользовательские макросы используются в элементах данных или триггерах шаблона, рекомендуется добавить эти макросы также в шаблон (даже если они определены глобально); в этом случае макросы типа Text будут работать ожидаемым образом после экспорта шаблона в 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) в разделе АдминистрированиеОбщиеВеб-интерфейс (AdministrationGeneralGUI);
  • используйте его в поле Когда активно (When active) в ПользователиПользователи (UsersUsers), вкладка пользователя Оповещения (Media);
  • используйте его для настройки более частого опроса элементов данных в течение рабочего времени:

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

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

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

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

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