5. Макросы низкоуровневого обнаружения
Обзор
Существует тип макроса, который используется в функционале низкоуровневого обнаружения (LLD):
{#МАКРОС}
Это такой макрос, который используется в правиле LLD и возвращает реальные значения имён файловых систем, сетевых интерфейсов, SNMP OID'ов и т.п.
Эти макросы можно использовать для создания прототипов (прототипов элементов данных, триггеров, графиков, узлов сети и групп узлов сети). Когда обнаруживаются реальные файловые системы, сетевые интерфейсы, виртуальные машины и т.п., такие макросы заменяются реальными значениями и становятся основой для создания реальных объектов.
Некоторые макросы низкоуровневого обнаружения «заранее добавлены» в функционал низкоуровневого обнаружения в Zabbix — {#FSNAME}, {#FSTYPE}, {#IFNAME}, {#SNMPINDEX}, {#SNMPVALUE}. Однако, не обязательно придерживаться этих имён при создании пользовательского правила низкоуровневого обнаружения. В таких случаях вы можете использовать любое другое имя LLD макроса и ссылаться по этому имени.
Поддерживаемые типы данных
При определении пользовательских правил обнаружения значения свойств, возвращаемые в объектах JSON для макросов LLD, должны быть одним из следующих примитивных типов:
- string
- number
- boolean
Массивы, объекты и нулевые значения не поддерживаются.
Любой макрос LLD, ссылающийся на такое значение, во время предварительной обработки и создания элемента данных останется нераскрытым и будет отображаться буквально (например, '{#MY_MACRO}').
Поддерживаемые места
LLD макросы можно использовать:
- в фильтре правила низкоуровневого обнаружения
- в прототипах элементов данных в
- именах
- параметрах ключей
- единицах измерения
- интервалах обновления1
- поле времени ожидания1
- периодах хранения истории1
- периодах хранения динамики изменений1
- шагах предварительной обработки значений элементов данных
- SNMP OID'ах
- полях IPMI датчиков
- выражениях вычисляемых/агрегируемых элементов данных, в:
- константах выражений и параметрах функций
- параметрах ключей элементов данных
- условиях фильтра агрегируемых элементов данных (имя группы узлов сети и имя тега)
- скриптах SSH и скриптах Telnet
- SQL запросах монитора баз данных
- полях endpoint JMX элементов данных
- описаниях
- полях URL HTTP агента
- полях HTTP поля запроса HTTP агента
- полях тела запроса HTTP агента
- полях требуемых кодов состояний HTTP агента
- полях ключей и значений заголовков HTTP агента
- полях имени пользователя аутентификации HTTP агента
- полях пароля аутентификации HTTP агента
- полях HTTP прокси HTTP агента
- полях файла SSL сертификата HTTP агента
- полях файла SSL ключа HTTP агента
- полях пароля к SSL ключу HTTP агента
- тегах
- в прототипах триггеров в
- именах
- оперативных данных
- выражениях (только в константах и параметрах функций)
- URL'ах
- описаниях
- тегах
- в прототипах графиков в
- именах
- в прототипах узлов сети в
- именах
- видимых именах
- полях пользовательских интерфейсов: IP, DNS, порт, SNMP v1/v2 community, SNMP v3 имя контекста, SNMP v3 имя безопасности, SNMP v3 пароль аутентификации, SNMP v3 ключевая фраза безопасности
- именах прототипов групп узлов сети
- значении тега узла сети
- значении макроса узла сети
- (смотрите полный список)
Во всех перечисленных местах, за исключением фильтров правил низкоуровневого обнаружения, LLD макросы можно использовать в статических контекстах пользовательских макросов.
Использование функций макросов
Функции макросов поддерживаются с макросами низкоуровневого обнаружения (за исключением фильтра правила низкоуровневого обнаружения), позволяя извлекать нужную часть значения макроса с помощью регулярного выражения.
Например, вы можете захотеть извлечь имя клиента и номер интерфейса из следующего макроса LLD, чтобы назначить теги событий:
{#IFALIAS}=имяклиента_1
Чтобы это сделать, в поле значения тега события прототипа триггеров можно вместе с макросом использовать функцию макроса regsub:

Обратите внимание, что запятые не разрешены в не заключённых в кавычки параметрах ключей элементов данных, поэтому параметр, содержащий функцию макроса, необходимо заключить в кавычки.
Символ обратной косой черты (\) следует использовать для экранирования двойных кавычек внутри параметра.
Например:
net.if.in["{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \1)}",bytes]
Для получения более подробных сведений о синтаксисе функций макросов смотрите: Функции макросов
Функции макросов в макросах низкоуровневого обнаружения поддерживаются, начиная с версии Zabbix 4.0.
Прототипы элементов данных без параметров ключа
Когда параметры ключа элемента данных не используются, поместите LLD-макрос внутрь квадратных скобок [...] параметров ключа элемента данных, чтобы он рассматривался в качестве параметра и подставлялся во время обнаружения:
v_[{#MACRO}]
Примечания
1 В полях, отмеченных 1, один макрос должен заполнять целое поле. Несколько макросов в одном поле или макросы вперемешку с текстом не поддерживаются.