[comment]: # translation:outdated

[comment]: # ({bfe1a94d-bfe1a94d})
# Агрегированные вычисления

[comment]: # ({/bfe1a94d-bfe1a94d})

[comment]: # ({b3f24d3f-f8e62abe})
#### Обзор

Агрегированные вычисления -  это тип [вычисляемых элементов данных](/manual/config/items/itemtypes/calculated), который позволяет собирать информацию с нескольких элементов данных Zabbix сервером, и затем вычислять совокупность, в зависимости от использованной функции агрегирования.

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

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

[comment]: # ({/b3f24d3f-f8e62abe})

[comment]: # ({b0cecf7e-63d83a0c})
#### Синтаксис

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

-   перечислить элементы данных для агрегации:

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

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

-   использовать функцию **foreach** в качестве единственного параметра, и её фильтр элементов данных для выбора требуемых элементов данных:

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

Функция агрегации - одна из поддерживаемых [функций агрегации](/manual/appendix/functions/aggregate#функции-агрегации-1): avg, max, min, sum и т.д.

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

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

Для получения более подробных сведений смотрите [функции foreach](/manual/appendix/functions/aggregate/foreach).

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

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

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

[comment]: # ({/b0cecf7e-63d83a0c})

[comment]: # ({3bbe172c-3bbe172c})
#### Примеры использования

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

[comment]: # ({/3bbe172c-3bbe172c})

[comment]: # ({874bcf94-874bcf94})
##### Пример 1

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

    sum(last_foreach(/*/vfs.fs.size[/,total]?[group="MySQL Servers"]))

[comment]: # ({/874bcf94-874bcf94})

[comment]: # ({3182672a-3182672a})
##### Пример 2

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

    sum(last_foreach(/host/net.if.in[*]))

[comment]: # ({/3182672a-3182672a})

[comment]: # ({cdf2da8b-cdf2da8b})
##### Пример 3

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

    avg(last_foreach(/*/system.cpu.load[,avg1]?[group="MySQL Servers"]))

[comment]: # ({/cdf2da8b-cdf2da8b})

[comment]: # ({db9c8fce-db9c8fce})
##### Пример 4

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

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

[comment]: # ({/db9c8fce-db9c8fce})

[comment]: # ({0233edd3-0233edd3})
##### Пример 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")]))

[comment]: # ({/0233edd3-0233edd3})

[comment]: # ({30448f5d-30448f5d})
##### Пример 6

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

    sum(last_foreach(/*/net.if.out[eth0,bytes]?[group="video"])) / sum(last_foreach(/*/nginx_stat.sh[active]?[group="video"])) 

[comment]: # ({/30448f5d-30448f5d})

[comment]: # ({3e9404a6-3e9404a6})
##### Пример 7

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

    sum(last_foreach(/*/zabbix[host,,items_unsupported]?[group="Zabbix servers"]))

[comment]: # ({/3e9404a6-3e9404a6})

[comment]: # ({50b7adbb-f094da29})
##### Примеры корректного/некорректного синтаксиса

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

|Выражение|Пример|
|-|---------|
|Допустимое|`avg(last(/host/key1),last(/host/key2)*10,last(/host/key1)*100)`<br>`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)`<br>`sum(/host/key, avg(10,2))`<br>`sum(/host/key,last(/host/key2))`|

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

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

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

[comment]: # ({/50b7adbb-f094da29})
