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

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

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

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

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

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

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

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

Разница между числовыми значениями будет вычисляться, как показано на примере следующих значений («предыдущее» и «последнее» значение = разница):
«1» и «5» = +4
«3» и «1» = -2
«0» и «-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 (по умолчанию для элементов данных символ, текст и журнал (лог)) — содержит подстроку шаблона (чувствительно к регистру)
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 секунды. Для активных прокси подавление активируется, если соединение восстанавливается более чем через 15 секунд.

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

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

Эта функция может работать неправильно, если есть расхождения по времени между Zabbix сервером, прокси и агентом. Смотрите также: требования по синхронизации времени;

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

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

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

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