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

Обзор

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

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

Синтаксис

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

функция_агрегации(функция_foreach(/узел_сети/ключ?[group="узел сети"],период_времени))

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

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

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

функция_агрегации(функция(/узел_сети/ключ,параметр),функция(/узел_сети2/ключ2,параметр),...)

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

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

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

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

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

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

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

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

Пример 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))

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