5. Макросы низкоуровневого обнаружения
Обзор
Существует тип макроса, используемый в функции низкоуровневого обнаружения (LLD):
{#MACRO}
Это макрос, который используется в правиле LLD и возвращает реальные значения имени файловой системы, сетевого интерфейса, SNMP OID и т. д.
Эти макросы можно использовать для создания прототипов сущностей (элемент данных, триггер, график, правило LLD, прототип узла сети и прототипа группы узлов сети). Во время обнаружения реальных файловых систем, сетевых интерфейсов, виртуальных машин и т. д. эти макросы подставляются реальными значениями и служат основой для создания реальных сущностей.
Некоторые макросы низкоуровневого обнаружения поставляются "из коробки" вместе с функцией LLD в 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
- поле HTTP-прокси агента HTTP
- поле файла HTTP SSL-сертификата агента HTTP
- поле файла HTTP SSL-ключа агента HTTP
- поле пароля HTTP SSL-ключа агента HTTP
- тегах
- для прототипов триггеров в
- имени
- оперативных данных
- выражении (только в константах и параметрах функций)
- URL
- описании
- тегах
- для прототипов графиков в
- имени
- для прототипов узлов сети в
- имени
- видимом имени
- настраиваемых полях интерфейса: IP, DNS, порт, SNMP v1/v2 community, SNMP v3 context name, SNMP v3 security name, SNMP v3 authentication passphrase, SNMP v3 privacy passphrase
- имени прототипа группы узлов сети
- значении тега узла сети
- значении макроса узла сети
- (см. полный список)
Во всех этих местах, кроме фильтра правила низкоуровневого обнаружения, макросы LLD можно использовать внутри статического контекста макроса.
Использование функций макросов
Функции макросов поддерживаются с макросами низкоуровневого обнаружения (за исключением фильтра правила низкоуровневого обнаружения), позволяя извлекать нужную часть значения макроса с помощью регулярного выражения.
Например, вы можете захотеть извлечь имя клиента и номер интерфейса из следующего макроса LLD, чтобы назначить теги событий:
{#IFALIAS}=имяклиента_1
Чтобы это сделать, в поле значения тега события прототипа триггеров можно вместе с макросом использовать функцию макроса regsub:

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