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

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

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

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

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

  • перечислить элементы данных для агрегации:
    функция_агрегации(функция(/узел_сети/ключ,параметр),функция(/узел_сети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. Но сами эти функции могут быть использованы в параметрах других (не относящихся к истории) функций (таблица 79).

Следует обратить внимание, что в таком выражении:

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

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