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

Обзор

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

Макросы могут быть использованы в:

  • ключах и описаниях элементов данных
  • в выражениях и именах триггеров (смотри примеры 2 и 3)
  • в некоторых других местах

Следующие символы разрешены в именах макросов: A-Z , 0-9 , _ , .

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

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

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

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

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

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

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

Наиболее общие случаи использования глобальных макросов и макросов уровня узлов сети:

  1. используются шаблоны со специфичными для узла сети атрибутами: пароли, номера портов, имена файлов, регулярные выражения, и т.д.
  2. глобальные макросы для глобального изменения конфигурации через “одно нажатие” и более тонкой настройки

Примеры

Пример 1

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

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

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

Пример 2

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

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

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

Если вы хотите использовать количество значений в качестве параметра функции (например, max(#3)), включите символ решетки # непосредственно в значение макроса, например вот так: SOME_PERIOD ⇒ #3

Пример 3

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

{ca_001:system.cpu.load[,avg1].min({$CPULOAD_PERIOD})}>{$MAX_CPULOAD}

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

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