1. Агрегированные вычисления

Обзор

Агрегированные вычисления — это тип вычисляемых элементов данных, который позволяет собирать информацию с нескольких элементов данных Zabbix сервером, и затем вычислять совокупность, в зависимости от использованной функции агрегирования.

Агрегированные вычисления не требуют наличия какого-либо агента, запущенного на наблюдаемом узле сети.

Синтаксис

Чтобы получить агрегаты, используйте одну из поддерживаемых aggregate functions: avg, max, min, sum и т. д. Затем добавьте функцию foreach в качестве единственного параметра и ее фильтр элементов данных, чтобы выбрать требуемые элементы данных:

aggregate_function(function_foreach(/host/key?[group="host group"],timeperiod))

Функция foreach (например, avg_foreach, count_foreach и т. д.) возвращает одно агрегированное значение для каждого выбранного элемента данных. Элементы данных выбираются с помощью фильтра элементов данных (/host/key?[group="host group"]) из истории элемента данных. Подробнее см. foreach functions.

Если у некоторых элементов данных нет данных за запрошенный период, они игнорируются при вычислении. Если ни у одного элемента данных нет данных, функция вернет ошибку.

В качестве альтернативы вы можете перечислить несколько элементов данных в качестве параметров для агрегирования:

aggregate_function(function(/host/key,parameter),function(/host2/key2,parameter),...)

Обратите внимание, что function здесь должна быть функцией истории/тренда.

Если результат агрегирования имеет значение с плавающей точкой, оно будет усечено до целого числа, если агрегированный тип информации элемента данных — Numeric (unsigned).

Пользовательские макросы и макросы низкоуровневого обнаружения поддерживаются в:

  • параметрах ключа элемента данных
  • параметрах функции
  • условиях фильтра (имя группы узлов сети и имя тега)
  • константах выражения

Агрегированное вычисление может стать неподдерживаемым, если:

  • не найден ни один из указанных элементов данных (это может произойти, если ключ элемента данных указан неверно, ни один из элементов данных не существует или все включенные группы указаны неверно)
  • нет данных для вычисления функции

Примеры использования

Примеры ключей для агрегированных вычислений.

Пример 1

Общий размер дискового пространства в группе узлов сети «MySQL Servers».

sum(last_foreach(/*/vfs.fs.size[/,total]?[group="MySQL Servers"]))
Пример 2

Сумма последних значений на узле сети всех элементов данных, совпадающих с net.if.in[*].

sum(last_foreach(/host/net.if.in[*]))
Пример 3

Средняя загрузка процессора в группе узлов сети «MySQL Servers».

avg(last_foreach(/*/system.cpu.load[,avg1]?[group="MySQL Servers"]))
Пример 4

Усреднение за 5 минут количества запросов в секунду по группе узлов сети «MySQL Servers».

avg(avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m))
Пример 5

Средняя загрузка CPU по всем узлам сети в нескольких группах узлов сети, у которых имеются заданные теги.

avg(last_foreach(/*/system.cpu.load?[(group="Servers A" or group="Servers B" or group="Servers C") and (tag="Service:" or tag="Importance:High")]))
Пример 6

Вычисление с использованием суммы последних значений элементов данных по всей группе узлов сети.

sum(last_foreach(/*/net.if.out[eth0,bytes]?[group="video"])) / sum(last_foreach(/*/nginx_stat.sh[active]?[group="video"]))
Пример 7

Общее количество неподдерживаемых элементов данных в группе узлов сети «Zabbix servers».

sum(last_foreach(/*/zabbix[host,,items_unsupported]?[group="Zabbix servers"]))
Пример 8

Сумма последних числовых результатов DNS проверок по всем узлам сети. Примером одного из возможных ключей элемента данных может являться net.dns[192.0.2.0,example.com,A] as an example of one possible key.

sum(last_foreach(/*/net.dns[*,*,*]))

Обратите внимание, что символы-заменители должны совпадать с количеством параметров в ключе (в данном случае net.dns имеет три параметра: ip, имя и тип).

Примеры корректного/некорректного синтаксиса

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

Выражение Пример
Допустимое avg(last(/host/key1),last(/host/key2)*10,last(/host/key1)*100)
max(avg(avg_foreach(/*/system.cpu.load?[group="Servers A"],5m)),avg(avg_foreach(/*/system.cpu.load?[group="Servers B"],5m)),avg(avg_foreach(/*/system.cpu.load?[group="Servers C"],5m)))
Недопустимое sum(/host/key,10+2)
sum(/host/key, avg(10,2))
sum(/host/key,last(/host/key2))

Обратите внимание, что в таком выражении, как:

sum(sum_foreach(//resptime[*],5m))/sum(count_foreach(//resptime[*],5m))

нельзя гарантировать, что обе части всегда будут иметь одинаковый набор значений. Пока вычисляется одна часть выражения, может прийти новое значение за запрашиваемый период, и тогда вторая часть выражения будет иметь отличающийся набор значений.