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))
нельзя гарантировать, что обе части всегда будут иметь одинаковый набор значений. Пока вычисляется одна часть выражения, может прийти новое значение за запрашиваемый период, и тогда вторая часть выражения будет иметь отличающийся набор значений.