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}=customername_1
Для этого можно использовать функцию макроса regsub с макросом в поле значения тега события прототипа триггера:

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