1 Функции макросов

Обзор

Функции макросов дают возможность модификации значений макросов.

Иногда макрос может раскрыться в значение, с которым не очень легко работать. Значение может быть длинным или содержать определённую подстроку, которая вас интересует, и которую вы бы хотели извлечь. Это та задача, где функции макросов могут быть полезны.

Синтаксис функции макросов:

{<макрос>.<функция>(<параметры>)}

где:

  • <макрос> - настраиваемый макрос (например, {ITEM.VALUE} или {#LLD_МАКРОС})
  • <функция> - применяемая функция
  • <параметры> - список параметров функции, разделённых запятыми.

Параметры необходимо заключать в кавычки, если они:

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

Например:

{{TIME}.fmttime(формат,сдвиг_времени)}
       {{ITEM.VALUE}.regsub(шаблон, вывод)}
       {{#LLD_МАКРОС}.regsub(шаблон, вывод)}

Поддерживаемые функции макросов

Опциональные параметры функций обозначены угловыми скобками (< >).

ФУНКЦИЯ
Описание Параметры Поддерживается для
fmtnum (цифры)
Форматирование числа для управления количеством цифр, выводимых после десятичной точки. цифры - количество цифр после десятичной точки. Допустимый диапазон: 0-20 (с Zabbix 6.0.21). Конечные нули будут обрезаны. {ITEM.VALUE}
{ITEM.LASTVALUE}
Макросы выражений
fmttime (формат,<сдвиг_времени>)
Формат времени. формат - обязательный формат строки, совместимый с функцией форматирования strftime
сдвиг_времени - сдвиг времени, применяемый к значению времени до форматирования; должен начинаться с
-<N><единица_времени> или +<N><единица_времени>, где
N - количество единиц времени для добавления или вычитания;
единица_времени - h (час), d (день), w (неделя), M (месяц) или y (год).
С Zabbix 5.4, параметр сдвиг_времени поддерживает многоэтапные операции со временем и может включать /<единица_времени> для сдвига к началу единицы времени (/d - полночь, /w - первый день недели (Понедельник), /M - первый день месяца и т.д.). Примеры:
-1w - ровно 7 дней назад;
-1w/w - понедельник предыдущей недели;
-1w/w+1d - вторник предыдущей недели.
Обратите внимание, что операции времени вычисляются слева направо, без учёта приоритетов. Например, -1M/d+1h/w будет проанализирован как ((-1M/d)+1h)/w.
{TIME}
iregsub (шаблон,вывод)
Извлечение подстроки совпадением с регулярным выражением (без учёта регистра). шаблон - регулярное выражение для поиска совпадения
вывод - опции вывода. Для захвата групп поддерживаются местозаменители \1 - \9. Заменитель \0 вернёт совпавший текст.
{ITEM.VALUE}
{ITEM.LASTVALUE}
Макросы низкоуровневого обнаружения (за исключением фильтра низкоуровневого обнаружения)
regsub (шаблон,вывод)
Извлечение подстроки совпадением с регулярным выражением (с учётом регистра). шаблон - регулярное выражение для поиска совпадения
вывод - опции вывода. Для захвата групп поддерживаются местозаменители \1 - \9. Заменитель \0 вернёт совпавший текст.
{ITEM.VALUE}
{ITEM.LASTVALUE}
Макросы низкоуровневого обнаружения (за исключением фильтра низкоуровневого обнаружения)

Если функция используется в поддерживаемых местах, но применена к макросу, который не поддерживает функции макросов, тогда макрос раскроется в «НЕИЗВЕСТНО».

Если шаблон не является корректным регулярным выражением, тогда макрос раскрывается в «НЕИЗВЕСТНО» (за исключением макросов низкоуровневого обнаружения, где в этом случае функция будет проигнорирована и макрос останется нераскрытым)

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

Примеры

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

Полученное значение Макрос Вывод
24.3413523 {{ITEM.VALUE}.fmtnum(2)} 24.34
24.3413523 {{ITEM.VALUE}.fmtnum(0)} 24
12:36:01 {{TIME}.fmttime(%B)} October
12:36:01 {{TIME}.fmttime(%d %B,-1M/M)} 1 September
123Log line {{ITEM.VALUE}.regsub(^[0-9]+, Problem)} Problem
123 Log line {{ITEM.VALUE}.regsub("^([0-9]+)", "Problem")} Problem
123 Log line {{ITEM.VALUE}.regsub("^([0-9]+)", Problem ID: \1)} Problem ID: 123
Log line {{ITEM.VALUE}.regsub(".*", "Problem ID: \1")} ''Problem ID: ''
MySQL crashed errno 123 {{ITEM.VALUE}.regsub("^(\w+).*?([0-9]+)", " Problem ID: \1_\2 ")} '' Problem ID: MySQL_123 ''
123 Log line {{ITEM.VALUE}.regsub("([1-9]+", "Problem ID: \1")} *НЕИЗВЕСТНО* (ошибочное регулярное выражение)
customername_1 {{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)} customername
customername_1 {{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)} 1
customername_1 {{#IFALIAS}.regsub("(.*)_([0-9]+", \1)} {{#IFALIAS}.regsub("(.*)_([0-9]+", \1)} (ошибочное регулярное выражение)
customername_1 {$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \1)}"} {$MACRO:"customername"}
customername_1 {$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \2)}"} {$MACRO:"1"}
customername_1 {$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"} {$MACRO:"{{#M}.regsub(\"(.*)_([0-9]+\", \1)}"} (ошибочное регулярное выражение)
customername_1 "{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+)\\", \1)}\"}" "{$MACRO:\"customername\"}"
customername_1 "{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+)\\", \2)}\"}" "{$MACRO:\"1\"}")
customername_1 "{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}" "{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}") (ошибочное регулярное выражение)
Просмотр полных значений элемента данных

Длинные значения раскрытых макросов {ITEM.VALUE} и {ITEM.LASTVALUE} для текстовых или журнальных элементов данных в некоторых местах веб-интерфейса обрезаются до 20 символов. Для просмотра полных значений этих макросов вы можете использовать функции макросов, например:

{{ITEM.VALUE}.regsub("(.*)", \1)}
{{ITEM.LASTVALUE}.regsub("(.*)", \1)}

Смртрите также: более подробная информация о макросах {ITEM.VALUE} и {ITEM.LASTVALUE}.