4. Функции истории

Все перечисленные здесь функции поддерживаются в:

Некоторые общие замечания о параметрах функций:

  • параметры функций разделяются запятыми
  • необязательные параметры функций (или части параметров) обозначаются угловыми скобками < >
  • параметры, специфичные для функций, описываются с каждой функцией
  • параметры /узел_сети/ключ и (сек|#число)<:сдвиг_времени> никогда не должны заключаться в кавычки
Общие параметры
  • /узел_сети/ключ является общим обязательным первым параметром для функций, ссылающихся на историю элемента данных узла сети
  • (сек|#число)<:сдвиг_времени> является общим вторым параметром для функций, ссылающихся на историю элемента данных узла сети, где:
    • сек - максимальный период вычисления в секундах (могут использоваться суффиксы времени), либо
    • #число - максимальная область вычисления среди последних собранных значений (если начинается со знака решётки)
    • сдвиг_времени (опционально) позволяет сдвигать точку вычислений по времени назад в прошлое. Смотрите более подробную информацию относительно того, как указывать сдвиг времени.

Функции истории

ФУНКЦИЯ
Описание Параметры, специфичные для функции Комментарии
change (/узел_сети/ключ)
Величина разницы между последним и предыдущим значениями. Поддерживаемые типы значений: float, int, str, text, log

Для строк возвращается:
0 - значения равны
1 - значения отличаются

Пример:
=> change(/узел_сети/ключ)>10

Разница между числовыми значениями будет вычисляться, как показано на примере следующих значений ('предыдущее' и 'последнее' значение = разница):
'1' and '5' = +4
'3' and '1' = -2
'0' and '-2.5' = -2.5

Смотрите также: abs для сравнения
changecount (/узел_сети/ключ,(сек|#число)<:сдвиг_времени>,<режим>)
Количество изменений между соседними значениями за определённый период вычисления. Смотрите общие параметры.

режим (опционально; должен быть в двойных кавычках)

Поддерживаются режимы:
all - считать все изменения (по умолчанию)
dec - считать убывания значений
inc - считать возрастания значений
Поддерживаемые типы значений: float, int, str, text, log

Для нечисловых типов значений параметр режим игнорируется.

Примеры:
=> changecount(/узел_сети/ключ, 1w) → количество изменений значения за последнюю неделю до текущего момента
=> changecount(/узел_сети/ключ,#10,"inc") → количество возрастаний значений (относительно соседнего значения) среди последних 10 значений
=> changecount(/узел_сети/ключ,24h,"dec") → количество убываний значений (относительно соседнего значения) за последние 24 часа до текущего момента
count (/узел_сети/ключ,(сек|#число)<:сдвиг_времени>,<оператор>,<шаблон>)
Количество значений за период вычисления. Смотрите общие параметры.

оператор (опционально; должен быть в двойных кавычках)

Поддерживаются операторы:
eq - равно (по умолчанию для integer и float)
ne - не равно
gt - больше, чем
ge - больше или равно
lt - меньше, чем
le - меньше или равно
like (по умолчанию для string, text и log) - содержит подстроку шаблона (чувствительно к регистру)
bitand - побитовое И
regexp - чувствительное к регистру соответствие регулярному выражению, данному в шаблоне
iregexp - нечувствительное к регистру соответствие регулярному выражению, данному в шаблоне

Примечание:
eq (по умолчанию), ne, gt, ge, lt, le, band, regexp, iregexp поддерживаются для целочисленных элементов данных
eq (по умолчанию), ne, gt, ge, lt, le, regexp, iregexp поддерживаются для элементов данных с плавающей точкой
like (по умолчанию), eq, ne, regexp, iregexp поддерживаются для элементов данных символ, текст и журнал (лог)

шаблон (опционально) - искомый шаблон (строковые аргументы должны быть в двойных кавычках)
Поддерживаемые типы значений: float, integer, string, text, log

Элементы данных с плавающей точкой совпадают с точностью 2.22e-16; если база данных не обновлена, то точность составляет 0.000001.

Если третий параметр bitand, то четвёртый параметр шаблон может быть указан как два числа, разделённых косой чертой ('/'): число_для_сравнения/маска. count() вычисляет "побитовое И" из значения и маски и сравнивает результат с числом_для_сравнения. Если результат "побитового И" равен числу_для_сравнения, то значение считается.
Если число_для_сравнения и маска равны, требуется указывать только маску (без '/').

Если третий параметр regexp или iregexp, то четвёртый параметр шаблон может быть обычным или глобальным (начинающимся с '@') регулярным выражением. В случае глобальных регулярных выражений чувствительность к регистру наследуется из настроек глобального регулярного выражения. При проверке соответствия регулярному выражению, значения с плавающей точкой всегда будут представлены с 4 цифрами после десятичной точки ('.'). Также обратите внимение, что для больших чисел различие между десятичным (хранящимся в базе данных) и двоичным (используемом сервером Zabbix) представлениями может повлиять на 4-ю десятичную цифру.

Примеры:
=> count(/узел_сети/ключ,10m) → количество значений за последние 10 минут до текущего момента
=> count(/узел_сети/ключy,10m,"like","error") → количество значений за последние 10 минут до текущего момента, которые содержат 'error'
=> count(/узел_сети/ключ,10m,,12) → количество значений за последние 10 минут до текущего момента, которые равны '12'
=> count(/узел_сети/ключ,10m,"gt",12) → количество значений за последние 10 минут до текущего момента, превышающих '12'
=> count(/узел_сети/ключ,#10,"gt",12) → количество значений среди 10 последних значений до текущего момента, которые больше чем '12'
=> count(/узел_сети/ключ,10m:now-1d,"gt",12) → количество значений за период между (24 часа и 10 минут назад) и (24 часа назад) от текущего момента, которые превышают '12'
=> count(/узел_сети/ключ,10m,"bitand","6/7") → количество значений за последние 10 минут до текущего момента, у которых в двоичном представлении последние три значащих бита равны '110'.
=> count(/узел_сети/ключ,10m:now-1d) → количество значений за период между (24 часа и 10 минут назад) и (24 часа назад) от текущего момента
countunique (/узел_сети/ключ,(сек|#число)<:сдвиг_времени>,<оператор>,<шаблон>)
Количество уникальных значений за определённый период вычисления. Смотрите общие параметры.

оператор (опционально; должен быть в двойных кавычках)

Поддерживаются операторы:
eq - равно (по умолчанию для integer и float)
ne - не равно
gt - больше, чем
ge - больше или равно
lt - меньше, чем
le - меньше или равно
like (по умолчанию для string, text и log) - значение содержит подстроку, заданную в шаблоне (с учётом регистра)
bitand - побитовое И
regexp - чувствительное к регистру соответствие регулярному выражению, данному в шаблоне
iregexp - нечувствительное к регистру соответствие регулярному выражению, данному в шаблоне

Примечание:
eq (по умолчанию), ne, gt, ge, lt, le, band, regexp, iregexp поддерживаются для целочисленных элементов данных
eq (default), ne, gt, ge, lt, le, regexp, iregexp поддерживаются для элементов данных с плавающей точкой
like (default), eq, ne, regexp, iregexp поддерживаются для элементов данных символ, текст и журнал (лог)

шаблон (опционально) - искомый шаблон (строковые аргументы должны быть в двойных кавычках)
Поддерживаемые типы значений: float, integer, string, text, log

Элементы данных с плавающей точкой совпадают с точностью 2.22e-16; если база данных не обновлена, то точность составляет 0.000001.

Если третий параметр bitand, то четвёртый параметр шаблон может быть указан как два числа, разделённых косой чертой ('/'): число_для_сравнения/маска. countunique() вычисляет "побитовое И" из значения и маски и сравнивает результат с числом_для_сравнения. Если результат "побитового И" равен числу_для_сравнения, то значение считается.
Если число_для_сравнения и маска равны, требуется указывать только маску (без '/').

Если третий параметр regexp или iregexp, то четвёртый параметр шаблон может быть обычным или глобальным (начинающимся с '@') регулярным выражением. В случае глобальных регулярных выражений чувствительность к регистру наследуется из настроек глобального регулярного выражения. При проверке соответствия регулярному выражению, значения с плавающей точкой всегда будут представлены с 4 цифрами после десятичной точки ('.'). Также обратите внимение, что для больших чисел различие между десятичным (хранящимся в базе данных) и двоичным (используемом сервером Zabbix) представлениями может повлиять на 4-ю десятичную цифру.

Примеры:
=> countunique(/узел_сети/ключ,10m) → количество уникальных значений за последние 10 минут до текущего момента
=> countunique(/узел_сети/ключ,10m,"like","error") → количество уникальных значений за последние 10 минут до текущего момента, которые содержат 'error'
=> countunique(/узел_сети/ключ,10m,"gt",12) → количество уникальных значений за последние 10 минут до текущего момента, превышающих '12'
=> countunique(/узел_сети/ключ,#10,"gt",12) → количество уникальных значений среди 10 последних значений до текущего момента, которые больше чем '12'
=> countunique(/узел_сети/ключ,10m:now-1d,"gt",12) → количество уникальных значений за период между (24 часа и 10 минут назад) и (24 часа назад) от текущего момента, которые превышают '12'
=> countunique(/узел_сети/ключ,10m,"bitand","6/7") → количество уникальных значений за последние 10 минут до текущего момента, у которых в двоичном представлении последние три значащих бита равны '110'.
=> countunique(/узел_сети/ключ,10m:now-1d) → количество уникальных значений за период между (24 часа и 10 минут назад) и (24 часа назад) от текущего момента
find (/узел_сети/ключ,<(сек|#число)<:сдвиг_времени>>,<оператор>,<шаблон>)
Поиск соответствующего значения. Смотрите общие параметры.

сек or #число (опционально) - если не указано, то по умолчанию проверяется последнее значение

оператор (опционально; должен быть заключён в двойные кавычки)

Поддерживаются операторы:
eq - равно (по умолчанию для integer и float)
ne - не равно
gt - больше, чем
ge - больше или равно
lt - меньше, чем
le - меньше или равно
like (по умолчанию для string, text и log) - значение содержит подстроку, заданную в шаблоне (с учётом регистра)
bitand - побитовое И
regexp - чувствительное к регистру соответствие регулярному выражению, данному в шаблоне
iregexp - нечувствительное к регистру соответствие регулярному выражению, данному в шаблоне

Примечание:
eq (по умолчанию), ne, gt, ge, lt, le, band, regexp, iregexp поддерживаются для целочисленных элементов данных
eq (по умолчанию), ne, gt, ge, lt, le, regexp, iregexp поддерживаются для элементов данных с плавающей точкой
like (по умолчанию), eq, ne, regexp, iregexp поддерживаются для элементов данных символ, текст и журнал (лог)

шаблон - искомый шаблон (строковые аргументы должны быть в двойных кавычках); регулярное выражение Perl Compatible Regular Expression (PCRE) если оператор - regexp или iregexp.
Поддерживаемые типы значений: float, int, str, text, log

Возвращает:
1 - найдено
0 - в противном случае

Если обрабатывается более одного значения, '1' возвращается, если имеется по крайней мере одно совпадающее значение.

С третьим параметром regexp или iregexp, четвёртый параметр шаблон может быть обычным или глобальным (начинающимся с '@') регулярным выражением. В случае глобальных регулярных выражений чувствительность к регистру наследуется из настроек глобального регулярного выражения.

Пример:
=> find(/узел_сети/ключ,10m,"like","error") → найти значение, содержащее 'error' за последние 10 минут до текущего момента
first (/узел_сети/ключ,сек<:сдвиг_времени>)
Первое (самое старое) значение за указанный период вычисления. Смотрите общие параметры. Поддерживаемые типы значений: float, int, str, text, log

Пример:
=> first(/узел_сети/ключ,1h) → извлечь самое старое значение за последний час вплоть до текущего момента

Смотрите также last().
fuzzytime (/узел_сети/ключ,сек)
Проверка того, насколько время пассивного агента отличается от времени Zabbix сервера/прокси. Смотрите общие параметры. Поддерживаемые типы значений: float, int

Возвращает:
1 - если разница между значением пассивного элемента данных (как штампа времени) и штампом времени Zabbix сервера/прокси (временем получения значения) меньше или равна сек секунд
0 - в противном случае

Обычно используется с 'system.localtime' для проверки, что локальное время синхронизировано с локальным временем Zabbix сервера. Обратите внимание, что 'system.localtime' должно быть настроено как пассивная проверка.
Также можно использовать с ключом vfs.file.time[/путь/файл,modify] для проверки, что файл не обновлялся длительное время.

Пример:
=> fuzzytime(/узел_сети/ключ,60s)=0 → обнаружение проблемы, если разница во времени превышает 60 секунд

Эту функцию не рекомендуется использовать в сложных триггерных выражениях (с участием нескольких элементов данных), поскольку это может привести к непредвиденным результатам (разница по времени будет считаться по наиболее свежей метрике), например, в таком: fuzzytime(/узел_сети/system.localtime,60s)=0 or last(/узел_сети/trap)<>0
last (/узел_сети/ключ,<#число<:сдвиг_времени>>)
Самое новое значение. Смотрите общие параметры.

#число (опционально) - N-ое значение из самых новых
Поддерживаемые типы значений: float, int, str, text, log

Обратите внимание, что #число (с решёткой, #N) здесь работает иначе, чем во многих других функциях.
Например:
last() всегда идентичен last(#1)
last(#3) - третье из самых новых значение (не три последних значения)

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

Пример:
=> last(/узел_сети/ключ) → извлечь последнее значение
=> last(/узел_сети/ключ,#2) → извлечь предыдущее значение
=> last(/узел_сети/ключ,#1) <> last(/узел_сети/ключ,#2) → последнее значение отличается от предыдущего

Смотрите также first().
logeventid (/узел_сети/ключ,<#число<:сдвиг_времени>>,<шаблон>)
Проверка, соответствует ли указанному регулярному выражению идентификатор события последней записи из журнала. Смотрите общие параметры.

#число (опционально) - N-ое из наиболее недавних значений

шаблон (опционально) - регулярное выражение, описывающее нужный шаблон, в формате Perl Compatible Regular Expression (PCRE) (строковые аргументы должны быть заключены в двойные кавычки).
Поддерживаемые типы значений: log

Возвращает:
0 - нет соответствия
1 - соответствует
logseverity (/узел_сети/ключ,<#число<:сдвиг_времени>>)
Важность события последней записи в журнале. Смотрите общие параметры.

#число (опционально) - N-ое из наиболее недавних значений
Поддерживаемые типы значений: log

Возвращает:
0 - важность по умолчанию
N - важность (целое число, полезно для журналов событий Windows: 1 - Уведомление, 2 - Предупреждение, 4 - Ошибка, 7 - Аудит отказов, 8 - Аудит успехов, 9 - Критическая ошибка, 10 - Детали).
Zabbix берёт важность журнала из поля Информация журнала событий Windows.
logsource (/узел_сети/ключ,<#число<:сдвиг_времени>>,<шаблон>)
Проверка, соответствует ли регулярному выражению источник последней записи в журнале. Смотрите общие параметры.

#число (опционально) - N-ое из наиболее недавних значений

шаблон (опционально) - регулярное выражение, описывающее нужный шаблон, в формате Perl Compatible Regular Expression (PCRE) (строковые аргументы должны быть заключены в двойные кавычки).
Поддерживаемые типы значений: log

Возвращает:
0 - нет соответствия
1 - соответствует

Обычно используется для журналов событий Windows. Например, logsource("VMware Server").
monodec (/узел_сети/ключ,(сек|#число)<:сдвиг_времени>,<режим>)
Проверка наличия монотонного убывания значений. Смотрите общие параметры.

режим (должен быть в двойных кавычках) - weak (каждое значение меньше или равно предыдущему; по умолчанию) или strict (каждое значение строго уменьшается)
Поддерживаемые типы значений: int

Возвращает 1, если все элементы в течение указанного периода времени непрерывно уменьшаются, 0 в противном случае.

Пример:
=> monodec(/Host1/system.swap.size[all,free],60s) + monodec(/Host2/system.swap.size[all,free],60s) + monodec(/Host3/system.swap.size[all,free],60s) - посчитать, на каком количестве узлов сети было уменьшение свободного места в области подкачки
monoinc (/узел_сети/ключ,(сек|#число)<:сдвиг_времени>,<режим>)
Проверка наличия монотонного возрастания значений. Смотрите общие параметры.

режим (должен быть в двойных кавычках) - weak (каждое значение больше или равно предыдущему; по умолчанию) или strict (каждое значение строго возрастает)
Поддерживаемые типы значений: int

Возвращает 1, если все элементы в течение указанного периода времени непрерывно возрастают, 0 в противном случае.

Пример:
=> monoinc(/Host1/system.localtime,#3,"strict")=0 - проверка того, постоянно ли увеличивается локальное время системы
nodata (/узел_сети/ключ,сек,<режим>)
Проверка отсутствия полученных данных. Смотрите общие параметры.

сек период должен быть не менее 30 секунд, так как процесс синхронизации истории (history syncer) вычисляет эту функцию раз в 30 секунд.

nodata(/узел_сети/ключ,0) запрещено.

режим - при значении strict (в двойных кавычках), эта функция будет нечувствительна к доступности прокси (смотрите комментарии для более подробной информации).
Поддерживаются все типы значений.

Возвращает:
1 - если нет полученных данных за указанный период времени
0 - в противном случае

Начиная с версии Zabbix 5.0, триггеры 'nodata', контролируемые прокси серверами, по умолчанию чувствительны к доступности прокси - если прокси становится недоступным, триггеры 'nodata' не будут срабатывать немедленно после восстановления соединения, а пропустят данные за задержанный период. Обратите внимание, что для пассивных прокси подавление активируется если соединение восстанавливается более чем на 15 секунд, но не менее чем 2 & ProxyUpdateFrequency секунд позже. Для активных прокси подавление активируется, если соединение восстанавливается более чем 15 секунд позже.

Чтобы выключить чувствительность к доступности прокси, используйте третий параметр, например: nodata(/узел_сети/ключ,5m,"strict"); в этом случае функция будт работать так же, как и до версии 5.0.0, и срабатывать, как только период оценки отсутствия данных (пять минут) истечёт.

Обратите внимание, эта функция отобразит ошибку в случае, если за указанный в первом параметре период:
- нет данных и Zabbix сервер был перезапущен
- нет данных и было завершено обслуживание
- нет данных и элемент данных был добавлен или заново активирован
Ошибки отображаются в колонке Инфо в настройке триггеров.

Эта функция может работать неправильно, если есть расхождения по времени между Zabbix сервером, прокси и агентом. Смотрите также: требования по синхронизации времени.
percentile (/узел_сети/ключ,(сек|#число)<:сдвиг_времени>,процент)
P-й процентиль периода, где P (процент) указывается третьим параметром. Смотрите общие параметры.

процент - число с плавающей точкой от 0 до 100 (включительно), до 4 цифр после десятичной точки
Поддерживаемые типы значений: float, int
rate (/узел_сети/ключ,сек<:сдвиг_времени>)
Усреднённая за секунду скорость увеличения монотонно возрастающего счётчика в течение указанного периода времени. Смотрите общие параметры. Поддерживаемые типы значений: float, int

Функционально соответствует функции 'rate [en]' из PromQL.

Пример:
=> rate(/узел_сети/ключ,30s) → Если за 30 секунд значение монотонно возросло на 20, эта функция вернёт 0.67.