[comment]: # translation:outdated

[comment]: # ({bfe1a94d-bfe1a94d})
# 聚合计算

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

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

聚合计算是一种 [计算监控项](/manual/config/items/itemtypes/calculated) 类型，允许 Zabbix 服务器从多个项目中收集信息，然后根据使用的聚合函数计算聚合。

聚合计算项仅支持无符号整数和浮点值（信息类型）。

聚合计算不需要在被监控的主机上运行任何agent。

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

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

-   项目历史:

``` aggregate_function(function(/host/item,parameter),function(/host2/item2,parameter),...) ```
-  一个 foreach 函数作为唯一参数:	
``` aggregate_function(foreach_function(/*/key?[group="host group"],timeperiod)) ```
   
    where:
    -   `聚合函数`是支持的聚合函数之一: avg，max，min，sum，等等.
    -    函数是受支持的 foreach 函数之一: avg _ foreach、 count _ foreach 等

Foreach 函数使用项筛选器处理多个项的历史记录，并返回一个值数组——每个项一个值。

注意:
如果聚合项类型的信息是 Numeric (无符号) ，则聚合结果生成的浮点值将被裁剪为整数。.
如果出现以下情况，则可能不支持聚合计算:
-   没有找到任何引用的项(如果项目键不正确、项目不存在或所有包含的组都不正确，则可能发生这种情况)
-   没有数据来计算函数

[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

主机组“MySQL Servers”每秒平均查询次数5分钟平均值。

    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) 参数。 但是，这些函数本身可以在其他（非历史）函数参数中使用。

|表达式|示例|
|-|---------|
|有效的|`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})
