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

Обзор

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

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

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

Синтаксис

Для получения агрегирования вы можете:

  • перечислить элементы данных для агрегации:
функция_агрегации(функция(/узел_сети/ключ,параметр),функция(/узел_сети2/ключ2,параметр),...)

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

  • использовать функцию foreach в качестве единственного параметра, и её фильтр элементов данных для выбора требуемых элементов данных:
функция_агрегации(функция_foreach(/узел_сети/ключ?[group="узел сети"],период_времени))

Функция агрегации - одна из поддерживаемых функций агрегации: avg, max, min, sum и т.д.

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

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

Для получения более подробных сведений смотрите функции foreach.

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

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

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

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

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

Пример 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"]))
Примеры корректного/некорректного синтаксиса

Выражения (включая вызовы функций) нельзя использовать в качестве параметров к функциям истории, динамики изменений или 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))

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