4. Функции истории
Все перечисленные здесь функции поддерживаются в:
Функции перечислены без подробных сведений. Нажмите на функцию, чтобы увидеть полную информацию.
| Функция | Описание |
|---|---|
| change | Величина разницы между последним и предыдущим значениями. |
| changecount | Количество изменений между соседними значениями за определённый период вычисления. |
| count | Количество значений за определённый период вычисления. |
| countunique | Количество уникальных значений за определённый период вычисления. |
| find | Поиск соответствующего значения за определённый период вычисления. |
| first | Первое (самое старое) значение за определённый период вычисления. |
| fuzzytime | Проверка того, насколько время пассивного агента отличается от времени Zabbix сервера/прокси. |
| last | Самое новое значение. |
| logeventid | Проверка, соответствует ли указанному регулярному выражению идентификатор события последней записи из журнала. |
| logseverity | Важность события последней записи в журнале. |
| logsource | Проверка, соответствует ли регулярному выражению источник последней записи в журнале. |
| monodec | Проверка наличия монотонного убывания значений. |
| monoinc | Проверка наличия монотонного возрастания значений. |
| nodata | Проверка отсутствия полученных данных. |
| percentile | P-й процентиль периода, где P (процент) указывается третьим параметром. |
| rate | Усреднённая за секунду скорость увеличения монотонно возрастающего счётчика в течение указанного периода времени. |
Общие параметры
/узел_сети/ключявляется общим обязательным первым параметром для функций, ссылающихся на историю элемента данных узла сети(сек|#число)<:сдвиг_времени>является общим вторым параметром для функций, ссылающихся на историю элемента данных узла сети, где:- сек — максимальный период вычисления в секундах (могут использоваться суффиксы времени), либо
- #число — максимальная область вычисления среди последних собранных значений (если начинается со знака решётки)
- сдвиг_времени (опционально) позволяет сдвигать точку вычислений по времени назад в прошлое. Смотрите более подробную информацию относительно того, как указывать сдвиг времени.
Подробности функций
Некоторые общие замечания о параметрах функций:
- параметры функций разделяются запятыми
- необязательные параметры функций (или части параметров) обозначаются угловыми скобками
<> - параметры, специфичные для функций, описываются с каждой функцией
- параметры
/узел_сети/ключи(сек|#число)<:сдвиг_времени>никогда не должны заключаться в кавычки
change(/узел_сети/ключ)
Величина разницы между последним и предыдущим значениями.
Поддерживаемые типы значений: Float, Integer, String, Text, Log.
Для строк возвращается: 0 — значения равны; 1 — значения отличаются.
Параметры: смотрите общие параметры.
Комментарии:
- Разница между числовыми значениями будет вычисляться, как показано на примере следующих значений («предыдущее» и «последнее» значение = разница):
«1» и «5» =+4
«3» и «1» =-2
«0» и «-2.5» =-2.5 - Смотрите также: abs для сравнения.
Примеры:
change(/узел_сети/system.uptime)<0 #изменение времени непрерывной работы системы получилось отрицательным относительно предыдущего значения (означая перезагрузку)
change(/узел_сети/system.cpu.load[all,avg1])>2 #загрузка CPU (за одну минуту) скакнула более чем на 2 относительно предыдущего значения
change(/узел_сети/vfs.fs.size[/,free])<-1G #свободное место на диске упало более чем на 1 ГБ за время между проверками
changecount(/узел_сети/ключ,(сек|#число)<:сдвиг_времени>,<режим>)
Количество изменений между соседними значениями за определённый период вычисления.
Поддерживаемые типы значений: Float, Integer, String, Text, Log.
Параметры:
- смотрите общие параметры
- режим (должен быть в двойных кавычках) — возможные значения: all — считать все изменения (по умолчанию); dec — считать убывания значений; inc — считать возрастания значений
Для нечисловых типов значений параметр режим игнорируется.
Примеры:
changecount(/узел_сети/icmpping,10m)>5 #состояние пинга поменялось более 5 раз за 10 минут
changecount(/узел_сети/vfs.file.contents["/sys/class/net/eth0/operstate"],1h)>5 #рабочее состояние интерфейса eth0 поменялось более 5 раз за час
changecount(/узел_сети/proc.num[httpd],15m)>10 #количество процессов httpd поменялось более 10 раз за 15 минут
changecount(/узел_сети/ключ,#10,"inc") #количество возрастаний значений (относительно соседнего значения) среди последних 10 значений
changecount(/узел_сети/ключ,24h,"dec") #количество убываний значений (относительно соседнего значения) за последние 24 часа до текущего момента
count(/узел_сети/ключ,(сек|#число)<:сдвиг_времени>,<оператор>,<шаблон>)
Количество значений за определённый период вычисления.
Поддерживаемые типы значений: Float, Integer, String, Text, Log.
Параметры:
- смотрите общие параметры
- оператор (должен быть в двойных кавычках)
Поддерживаются
операторы:
eq — равно (по умолчанию для integer и float)
ne — не равно
gt — больше
ge — больше или равно
lt — меньше
le — меньше или равно
like (по умолчанию для элементов данных символ, текст и журнал (лог)) — содержит подстроку шаблона (чувствительно к регистру)
bitand — побитовое И
regexp — чувствительное к регистру соответствие регулярному выражению, данному вшаблоне
iregexp — нечувствительное к регистру соответствие регулярному выражению, данному вшаблоне - шаблон — искомый шаблон (строковые аргументы должны быть в двойных кавычках)
Комментарии:
- Элементы данных с плавающей точкой совпадают с точностью 2.22e-16.
- like в качестве оператора не поддерживается для целочисленных значений.
- Для значений с типами символ, текст и журнал (лог) поддерживаются только операторы eq, ne, like, regexp и iregexp.
- Для оператора bitand четвёртый параметр
шаблонможет быть указан как два числа, разделённых косой чертой («/»): число_для_сравнения/маска. count() вычисляет «побитовое И» из значения и маски и сравнивает результат с числом_для_сравнения. Если результат «побитового И» равен числу_для_сравнения, то значение считается.
Если число_для_сравнения и маска равны, требуется указывать только маску (без «/»). - Для операторов regexp и iregexp четвёртый параметр
шаблонможет быть обычным или глобальным (начинающимся с «@») регулярным выражением. В случае глобальных регулярных выражений чувствительность к регистру наследуется из настроек глобального регулярного выражения. При проверке соответствия регулярному выражению, значения с плавающей точкой всегда будут представлены с 4 цифрами после десятичной точки («.»). Также обратите внимение, что для больших чисел различие между десятичным (хранящимся в базе данных) и двоичным (используемом сервером Zabbix) представлениями может повлиять на 4-ю десятичную цифру.
Примеры:
count(/узел_сети/icmpping,30m,,"0")>5 #пинг сбоил более 5 раз за 30 минут
count(/узел_сети/ключ,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(/узел_сети/ключ,(сек|#число)<:сдвиг_времени>,<оператор>,<шаблон>)
Количество уникальных значений за определённый период вычисления.
Поддерживаемые типы значений: Float, Integer, String, Text, Log.
Параметры:
- смотрите общие параметры
- оператор (должен быть в двойных кавычках).
Поддерживаются
операторы:
eq — равно (по умолчанию для integer и float)
ne — не равно
gt — больше
ge — больше или равно
lt — меньше
le — меньше или равно
like (по умолчанию для элементов данных символ, текст и журнал (лог)) — содержит подстроку шаблона (чувствительно к регистру)
bitand — побитовое И
regexp — чувствительное к регистру соответствие регулярному выражению, данному вшаблоне
iregexp — нечувствительное к регистру соответствие регулярному выражению, данному вшаблоне - шаблон — искомый шаблон (строковые аргументы должны быть в двойных кавычках)
Комментарии:
- Элементы данных с плавающей точкой совпадают с точностью 2.22e-16.
- like в качестве оператора не поддерживается для целочисленных значений.
- Для значений с типами символ, текст и журнал (лог) поддерживаются только операторы eq, ne, like, regexp и iregexp.
- Для оператора bitand четвёртый параметр
шаблонможет быть указан как два числа, разделённых косой чертой («/»): число_для_сравнения/маска. countunique() вычисляет «побитовое И» из значения и маски и сравнивает результат с числом_для_сравнения. Если результат «побитового И» равен числу_для_сравнения, то значение считается.
Если число_для_сравнения и маска равны, требуется указывать только маску (без «/»). - Для операторов regexp и iregexp четвёртый параметр
шаблонможет быть обычным или глобальным (начинающимся с «@») регулярным выражением. В случае глобальных регулярных выражений чувствительность к регистру наследуется из настроек глобального регулярного выражения. При проверке соответствия регулярному выражению, значения с плавающей точкой всегда будут представлены с 4 цифрами после десятичной точки («.»). Также обратите внимение, что для больших чисел различие между десятичным (хранящимся в базе данных) и двоичным (используемом сервером Zabbix) представлениями может повлиять на 4-ю десятичную цифру.
Примеры:
countunique(/узел_сети/ключ,10m) #количество уникальных значений за последние 10 минут до текущего момента
countunique(/узел_сети/ключ,10m,"like","error") #количество уникальных значений за последние 10 минут до текущего момента, которые содержат «error»
countunique(/узел_сети/ключ,10m,,12) #количество уникальных значений за последние 10 минут до текущего момента, которые равны «12»
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(/узел_сети/ключ,<(сек|#число)<:сдвиг_времени>>,<оператор>,<шаблон>)
Поиск соответствующего значения за определённый период вычисления.
Поддерживаемые типы значений: Float, Integer, String, Text, Log.
Возвращает: 1 — найдено; 0 — в противном случае.
Параметры:
- смотрите общие параметры
- сек или #число — если не указано, то по умолчанию проверяется последнее значение
- оператор (должен быть заключён в двойные кавычки)
Поддерживаются
операторы:
eq — равно (по умолчанию для integer и float)
ne — не равно
gt — больше
ge — больше или равно
lt — меньше
le — меньше или равно
like (по умолчанию для string, text и log) — значение содержит подстроку, заданную вшаблоне(с учётом регистра)
bitand — побитовое И
regexp — чувствительное к регистру соответствие регулярному выражению, данному вшаблоне
iregexp — нечувствительное к регистру соответствие регулярному выражению, данному вшаблоне - шаблон — искомый шаблон (строковые аргументы должны быть в двойных кавычках); регулярное выражение Perl Compatible Regular Expression (PCRE) если
оператор— regexp или iregexp
Комментарии:
- Если обрабатывается более одного значения, «1» возвращается, если имеется по крайней мере одно совпадающее значение.
- like в качестве оператора не поддерживается для целочисленных значений.
- like и bitand в качестве оператора не поддерживаются для значений с плавающей точкой.
- Для значений с типом символ, текст и журнал (лог) поддерживаются только операторы eq, ne, like, regexp и iregexp.
- С операторами regexp и iregexp четвёртый параметр
шаблонможет быть обычным или глобальным (начинающимся с «@») регулярным выражением. В случае глобальных регулярных выражений чувствительность к регистру наследуется из настроек глобального регулярного выражения.
Примеры:
find(/узел_сети/agent.version,,"like","beta")=1 #Zabbix agent имеет бета-версию, требуется обновление
find(/узел_сети/log[/var/log/nginx/access.log],,"regexp"," 500 ")=1 #найдена внутренняя ошибка веб-сервера
first(/узел_сети/ключ,сек<:сдвиг_времени>)
Первое (самое старое) значение за указанный период вычисления.
Поддерживаемые типы значений: Float, Integer, String, Text, Log.
Параметры:
- смотрите общие параметры
Смотрите также last().
Пример:
first(/узел_сети/ключ,1h) #извлечь самое старое значение за последний час вплоть до текущего момента
fuzzytime(/узел_сети/ключ,сек)
Проверка того, насколько время пассивного агента отличается от времени Zabbix сервера/прокси.
Поддерживаемые типы значений: Float, Integer.
Возвращает: 1 — если разница между значением пассивного элемента данных (как штампа времени) и штампом времени Zabbix сервера/прокси (временем получения значения) меньше или равна сек секунд; 0 — в противном случае.
Параметры:
- Смотрите общие параметры.
Комментарии:
- Обычно используется с элементом данных «system.localtime» для проверки того, что локальное время синхронизировано с локальным временем Zabbix сервера. Обратите внимание, что «system.localtime» должно быть настроено как пассивная проверка.
- Также можно использовать с ключом
vfs.file.time[/путь/файл,modify]для проверки, что файл не обновлялся длительное время. - Эту функцию не рекомендуется использовать в сложных триггерных выражениях (с участием нескольких элементов данных), поскольку это может привести к непредвиденным результатам (разница по времени будет считаться по наиболее свежей метрике), например, в таком:
fuzzytime(/узел_сети/system.localtime,60s)=0 or last(/узел_сети/trap)<>0.
Примеры:
fuzzytime(/узел_сети/system.localtime,5m)=0 #локальное время клиента отличается от времени Zabbix сервера/прокси более чем на 5 минут
fuzzytime(/узел_сети/system.localtime,5m)=0 and nodata(/host/system.localtime,10m)=0 #локальное время клиента отличается от времени Zabbix сервера/прокси более чем на 5 минут (в тоже время убеждаемся, что элемент данных не перестал сообщать значения)
last(/узел_сети/ключ,<#число<:сдвиг_времени>>)
Самое новое значение.
Поддерживаемые типы значений: Float, Integer, String, Text, Log.
Параметры:
- Смотрите общие параметры
- #число (опционально) — N-ое значение из самых новых
Комментарии:
- Обратите внимание, что #число (с решёткой, #N) здесь работает иначе, чем во многих других функциях.
Например:
last(/узел_сети/ключ)всегда идентиченlast(/узел_сети/ключ,#1);last(/узел_сети/ключ,#3)— третье из самых новых значение (не три последних значения). - Zabbix не гарантирует точный порядок значений, если в истории существует более двух значений за одну секунду.
- Смотрите также first().
Примеры:
last(/узел_сети/ключ) #извлечь последнее значение
last(/узел_сети/ключ,#2) #извлечь предыдущее значение
last(/узел_сети/ключ,#1) <> last(/узел_сети/ключ,#2) #последнее значение отличается от предыдущего
logeventid(/узел_сети/ключ,<#число<:сдвиг_времени>>,<шаблон>)
Проверка, соответствует ли указанному регулярному выражению идентификатор события последней записи из журнала.
Поддерживаемые типы значений: Log.
Возвращает: 0 — нет соответствия; 1 — соответствует.
Параметры:
- Смотрите общие параметры;
- #число (опционально) — N-ое из наиболее недавних значений;
- шаблон (опционально) — регулярное выражение, описывающее нужный шаблон, в формате Perl Compatible Regular Expression (PCRE) (строковые аргументы должны быть заключены в двойные кавычки).
Примеры:
logeventid(/узел_сети/eventlog[Security],,"4625")=1 #найдена запись в журнале с идентификатором, совпадающим с "4625" (неудачная аутентификация, failed authentication)
logeventid(/узел_сети/eventlog[System],,"6008|41")=1 #найдена запись в журнале с идентификатором, совпадающим с "6008" или "41"
logseverity(/узел_сети/ключ,<#число<:сдвиг_времени>>)
Важность события последней записи в журнале.
Поддерживаемые типы значений: Log.
Возвращает: 0 — важность по умолчанию; N — важность (целое число, полезно для журналов событий Windows: 1 — Уведомление, 2 — Предупреждение, 4 — Ошибка, 7 — Аудит отказов, 8 — Аудит успехов, 9 — Критическая ошибка, 10 — Детали).
Параметры:
- Смотрите общие параметры;
- #число (опционально) — N-ое из наиболее недавних значений.
Zabbix берёт важность журнала из поля Информация журнала событий Windows.
Примеры:
logseverity(/узел_сети/log[/var/log/syslog],10m)>3 #найдена запись в журнале с важностью выше чем «3»
logseverity(/узел_сети/eventlog[System],10m)=4 #найдена запись в журнале с важностью, равной «Ошибка»
logsource(/узел_сети/ключ,<#число<:сдвиг_времени>>,<шаблон>)
Проверка, соответствует ли регулярному выражению источник последней записи в журнале.
Поддерживаемые типы значений: Log.
Возвращает: 0 — нет соответствия; 1 — соответствует.
Параметры:
- Смотрите общие параметры;
- #число (опционально) — N-ое из наиболее недавних значений;
- шаблон (опционально) — регулярное выражение, описывающее нужный шаблон, в формате Perl Compatible Regular Expression (PCRE) (строковые аргументы должны быть заключены в двойные кавычки).
Обычно используется для журналов событий Windows.
Примеры:
logsource(/узел_сети/eventlog[Application],,"MSSQLSERVER")=1 #найдена запись в журнале с источником, совпадающим с «MSSQLSERVER»
logsource(/узел_сети/eventlog[System],,"Service Control Manager")=1 #найдена запись в журнале с источником, совпадающим с «Service Control Manager»
logsource(/узел_сети/eventlog[System],,"Service Control Manager")=1 and logeventid(/host/eventlog[System],,"7031")=1 #найдена запись в журнале с источником, совпадающим с «Service Control Manager», и и идентификатором события, совпадающим с «7031»
monodec(/узел_сети/ключ,(сек|#число)<:сдвиг_времени>,<режим>)
Проверка наличия монотонного убывания значений.
Поддерживаемые типы значений: Integer.
Возвращает: 1, если все элементы в течение указанного периода времени непрерывно уменьшаются; 0 — в противном случае.
Параметры:
- Смотрите общие параметры
- режим (должен быть в двойных кавычках) — weak (каждое значение меньше или равно предыдущему; по умолчанию) или strict (каждое значение строго уменьшается)
Примеры:
monodec(/узел_сети/system.swap.size[all,free],60s) + monodec(/узел_сети2/system.swap.size[all,free],60s) + monodec(/узел_сети3/system.swap.size[all,free],60s) #посчитать, на каком количестве узлов сети было уменьшение свободного места в области подкачки
monodec(/узел_сети/proc.num[nginx],10m,"strict")=1 #количество процессов nginx монотонно уменьшалось за последние 10 минут
monoinc(/узел_сети/ключ,(сек|#число)<:сдвиг_времени>,<режим>)
Проверка наличия монотонного возрастания значений.
Поддерживаемые типы значений: Integer.
Возвращает: 1, если все элементы в течение указанного периода времени непрерывно возрастают; 0 — в противном случае.
Параметры:
- Смотрите общие параметры
- режим (должен быть в двойных кавычках) — weak (каждое значение больше или равно предыдущему; по умолчанию) или strict (каждое значение строго возрастает)
Примеры:
monoinc(/узел_сети/system.localtime,#3,"strict")=0 #локальное время системы не увеличивается последовательно
monoinc(/узел_сети/vfs.dir.count[/mnt/data/logs],24h,"weak")=0 #срабатывает, если количество файлов не меняется более 24 часов (ожидается рост)
nodata(/узел_сети/ключ,сек,<режим>)
Проверка отсутствия полученных данных.
Поддерживаемые типы значений: Integer, Float, Character, Text, Log.
Возвращает: 1 — если нет полученных данных за указанный период времени; 0 — в противном случае.
Параметры:
- Смотрите общие параметры
- сек — период должен быть не менее 30 секунд, так как процесс синхронизации истории (history syncer) вычисляет эту функцию раз в 30 секунд;
nodata(/узел_сети/ключ,0)запрещено - режим — при значении strict (в двойных кавычках) эта функция будет нечувствительна к доступности прокси (смотрите комментарии для более подробной информации)
Комментарии:
- Триггеры «nodata», контролируемые прокси серверами, по умолчанию чувствительны к доступности прокси — если прокси становится недоступным, триггеры «nodata» не будут срабатывать немедленно после восстановления соединения, а пропустят данные за задержанный период.
Обратите внимание, что для пассивных прокси подавление активируется если соединение восстанавливается более чем через 15 секунд и не менее чем через 2 секунды.
Для активных прокси подавление активируется, если соединение восстанавливается более чем через 15 секунд.
Чтобы выключить чувствительность к доступности прокси, используйте третий параметр, например:
nodata(/узел_сети/ключ,5m,"strict"); в этом случае функция будет срабатывать, как только период оценки отсутствия данных (пять минут) истечёт. - Эта функция отобразит ошибку в случае, если за указанный в первом параметре период:
- нет данных и Zabbix сервер был перезапущен
- нет данных и было завершено обслуживание
- нет данных и элемент данных был добавлен или заново активирован. - Ошибки отображаются в колонке Инфо в настройке триггеров.
- Эта функция может работать неправильно, если есть расхождения по времени между Zabbix сервером, прокси и агентом. Смотрите также: требования по синхронизации времени.
Пример:
nodata(/узел_сети/agent.ping,5m)=1 #срабатывает, если от Zabbix агента за 5 минут не было получено данных
percentile(/узел_сети/ключ,(сек|#число)<:сдвиг_времени>,процент)
P-й процентиль периода, где P (процент) указывается третьим параметром.
Поддерживаемые типы значений: Float, Integer.
Параметры:
- Смотрите общие параметры;
- процент — число с плавающей точкой от 0 до 100 (включительно), до 4 цифр после десятичной точки.
Примеры:
percentile(/узел_сети/net.if.in[eth0,bytes],1h,95)>1000000 #95-й процентиль входящего сетевого трафика (байт/сек) за 1 час превысил пороговое значение (например, 1 МБ/с).
percentile(/узел_сети/system.cpu.util,5m,95)>80 #95-й процентиль процента использования CPU в режиме пользователя превысил 80%
percentile(/узел_сети/icmppingsec[192.168.0.2],15m,95)>0.15 #большинство измерений задержки показывают значение ниже 150 мс, но верхняя часть диапазона (верхние 5%) указывает на наличие регулярной задержки
percentile(/узел_сети/net.if.in[eth0,bytes],1h,50) #вычислить 50-й процентиль (медианное значение) входящего сетевого трафика за час; это даст результат, отличающийся от функции avg() (среднее значение), поскольку процентиль не учитывает аномальные значения
(percentile(/узел_сети/net.if.in[eth0,bytes],1h,50)+percentile(/узел_сети/net.if.in[eth0,bytes],1h,51))/2 #вычислить точное медианное значение с чётным числом значений за час
rate(/узел_сети/ключ,сек<:сдвиг_времени>)
Усреднённая за секунду скорость увеличения монотонно возрастающего счётчика в течение указанного периода времени.
Поддерживаемые типы значений: Float, Integer.
Параметры:
- Смотрите общие параметры
Функционально соответствует функции «rate [en]» из PromQL.
Примеры:
rate(/узел_сети/ключ,30s) #Если за 30 секунд значение монотонно возросло на 20, эта функция вернёт 0.67.
rate(/узел_сети/net.if.in[eth0,bytes],5m)>500000 #скорость входящего трафика на интерфейсе eth0 превысила 500 КБ/с за последние 5 минут
rate(/узел_сети/app.requests.count,1m)>100 #за последнюю минуту счетчик запросов увеличился более чем на 100 запросов в секунду.