[comment]: # ({19cf85e8-bfe1a94d})
# 1 Cálculos agregados

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

[comment]: # ({96203d1d-f8e62abe})
#### Descripción general

Los cálculos agregados son un tipo de [métrica calculada](/manual/config/items/itemtypes/calculated) 
 que permite recopilar información de varias métricas por el servidor Zabbix y 
luego calcular un agregado, dependiendo de la función agregada utilizada.

Los cálculos agregados no requieren que ningún agente se ejecute en el equipo
que está siendo monitoreado.

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

[comment]: # ({ab0c22a1-63d83a0c})
#### Sintaxis

Para recuperar agregados, utilice una de las [funciones de agregación](/manual/appendix/functions/aggregate) compatibles: `avg`, `max`, `min`, `sum`, etc.
Luego añada la función **foreach** como único parámetro y su filtro de item para seleccionar los items necesarios:

```default
aggregate_function(function_foreach(/host/key?[group="host group"],timeperiod))
```

Una función **foreach** (por ejemplo, *avg_foreach*, *count_foreach*, etc.) devuelve un valor agregado por cada item seleccionado.
Los items se seleccionan mediante el filtro de item (`/host/key?[group="host group"]`), a partir del historial de items.
Para más detalles, consulte [funciones foreach](/manual/appendix/functions/aggregate/foreach).

Si algunos de los items no tienen datos para el período solicitado, se ignoran en el cálculo.
Si ningún item tiene datos, la función devolverá un error.

Como alternativa, puede enumerar varios items como parámetros para la agregación:

```default
aggregate_function(function(/host/key,parameter),function(/host2/key2,parameter),...)
```

Tenga en cuenta que `function` aquí debe ser una función de historial/tendencias.

::: noteclassic
Si el agregado da como resultado un valor de tipo float, se truncará a un entero si el tipo de información del item agregado es *Numérico (sin signo)*.
:::

Se admiten macros de usuario y macros de descubrimiento de bajo nivel en:

-   parámetros de clave de item
-   parámetros de función
-   condiciones de filtro (nombre del grupo de hosts y nombre de etiqueta)
-   constantes de expresión

Un cálculo agregado puede pasar a no ser compatible si:

-   no se encuentra ninguno de los items referenciados (lo que puede ocurrir si la clave del item es incorrecta, ninguno de los items existe o todos los grupos incluidos son incorrectos)
-   no hay datos para calcular una función

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

[comment]: # ({3bbe172c-3bbe172c})
#### Ejemplos de uso

Ejemplos de claves para cálculos agregados.

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

[comment]: # ({1306478c-874bcf94})
##### Ejemplo 1

Espacio total en disco del grupo de hosts 'MySQL Servers'.

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

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

[comment]: # ({5c3dc788-3182672a})
##### Ejemplo 2

Suma de los últimos valores de todos los items que coinciden con net.if.in\[\*\] en el host.

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

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

[comment]: # ({beca1bb5-cdf2da8b})
##### Ejemplo 3

Carga promedio del procesador del grupo de hosts 'MySQL Servers'.

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

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

[comment]: # ({c12aa12c-db9c8fce})
##### Ejemplo 4

Promedio de 5 minutos del número de consultas por segundo para el grupo de hosts 'MySQL Servers'.

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

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

[comment]: # ({c083097e-0233edd3})
##### Ejemplo 5

Carga promedio de CPU en todos los hosts de varios grupos de hosts que tienen las etiquetas específicas.

```default
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]: # ({/c083097e-0233edd3})

[comment]: # ({0a45c034-30448f5d})
##### Ejemplo 6

Cálculo utilizado en las sumas de los valores más recientes de los items de todo un grupo de hosts.

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

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

[comment]: # ({dd370fd1-3e9404a6})
##### Ejemplo 7

El número total de items no compatibles en el grupo de hosts 'Zabbix servers'.

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

##### Ejemplo 8

Suma de los últimos resultados numéricos de las comprobaciones DNS en todos los hosts.
El formato del item mostrado es `net.dns[192.0.2.1,example.com,A]` como ejemplo de una posible clave.

```default
sum(last_foreach(/*/net.dns[*,*,*]))
```

Tenga en cuenta que los comodines deben coincidir con el número de parámetros de la clave (aquí [`net.dns`](/manual/config/items/itemtypes/zabbix_agent#net.dns) tiene tres parámetros: ip, name, type).

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

[comment]: # ({f6401cd3-f094da29})
##### Ejemplos de sintaxis correcta/incorrecta

Las expresiones (incluidas las llamadas a funciones) no pueden utilizarse como parámetros de historial, tendencia o foreach de las [funciones](/manual/appendix/functions).
Sin embargo, esas funciones pueden utilizarse en otros parámetros de función (no históricos).

|Expresión|Ejemplo|
|-|---------|
|Válido|`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)))`|
|No válido|`sum(/host/key,10+2)`<br>`sum(/host/key, avg(10,2))`<br>`sum(/host/key,last(/host/key2))`|

Tenga en cuenta que en una expresión como:

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

no se puede garantizar que ambas partes de la ecuación tengan siempre el mismo conjunto de valores.
Mientras se evalúa una parte de la expresión, puede llegar un nuevo valor para el periodo solicitado y entonces la otra parte de la expresión tendrá un conjunto de valores diferente.

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