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

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

Обзор

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

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

{$МАКРОС}

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

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

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

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

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

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

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

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

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

Настройка

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

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

Если пользовательский макрос используется в элементах данных или триггерах шаблона, то рекомендуется добавить этот макрос к шаблону, даже если он задан на глобальном уровне. Таким образом при экспорте шаблона в XML и импорте его в другую систему элементы данных и триггеры продолжат работать, как и ожидалось.

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

Параметр Описание
Макрос Имя макроса. Имя должно быть заключено в фигурные скобки и начинаться с символа доллара.
Пример: {$FRONTEND_URL}. В именах макросов допускаются следующие символы: A-Z (только в верхнем регистре) , 0-9 , _ , .
Значение Значение макроса. Поддерживаются три типа значений:
Текст (по умолчанию) - значение в виде простого текста
Скрытый текст - значение маскируется звездочками, что может быть полезным для защиты конфиденциальной информации, такой как пароли или общие ключи.
Секрет Хранилища - значение содержит путь ссылки (в виде 'путь:ключ', например, “secret/zabbix:password”) к секрету Хранилища

Обратите внимание, хотя значение секретного макроса скрыто от глаз, значение может быть раскрыто через использование в элементах данных. Например, во внешнем скрипте оператор 'echo', который ссылается на секретный макрос, можно использовать для раскрытия значения макроса в веб-интерфейсе, поскольку Zabbix сервер имеет доступ к реальному значению макроса.

Для выбора типа значения нажмите на кнопку в конце поля ввода значения:
иконка обозначает текстовый макрос;
иконка обозначает скрытый текстовый макрос. При наведении курсора значение поля трансформируется в a кнопку, которая позволяет ввести новое значение макросу (чтобы выйти без сохранения нового значения, нажмите на стрелку назад ().
иконка обозначает секретный макрос Хранилища.

Максимальная длина значения пользовательского макроса составляет 2048 символов (255 символов в версиях до 5.2.0).
Описание Текстовое поле, используемое для предоставления дополнительной информации о макросе.

URL-адреса, которые содержат скрытый макрос не будут работать макросами, так как макрос в них будет раскрыт в виде "******".

В выражениях триггеров пользовательские макросы будут раскрыты, если ссылаются на параметр или константу. Они НЕ будут раскрыты, если ссылаются на узел сети, ключ элемента данных, функцию, оператор или выражение другого триггера. Скрытые макросы нельзя использовать в выражениях триггеров.

Примеры

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

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

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

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

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

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