1 聚合计算
概述
聚合计算是一种 计算项目 类型,允许 Zabbix 服务器从多个项目收集信息,然后根据所使用的聚合函数计算聚合。
聚合计算不需要在受监控的主机上运行任何代理。
语法
要检索聚合,请使用受支持的 聚合函数 之一: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 函数。
如果某些项目在请求的时间段内没有数据,则在计算中会忽略它们。如果所有项目都没有数据,则该函数将返回错误。
或者,您可以列出多个项目作为聚合的参数:
aggregate_function(function(/host/key,parameter),function(/host2/key2,parameter),...)
请注意,此处的“function”必须是历史/趋势函数。
如果聚合结果为浮点值,则如果聚合项目信息类型为“数字(无符号)”,则该浮点值将被修剪为整数。
如果出现以下情况,聚合计算可能不受支持:
- 未找到任何引用的项目(如果项目键不正确、不存在任何项目或所有包含的组都不正确,则可能会发生这种情况)
- 没有数据来计算函数
使用示例
用于聚合计算的键的示例
示例 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
主机组“MySQL Servers”每秒平均查询次数5分钟平均值。
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"]))
正确/错误的语法示例
表达式(包括函数调用)不能用作历史、趋势或循环 函数 参数。 但是,这些函数本身可以在其他(非历史)函数参数中使用。
表达式 | 示例 |
---|---|
有效的 | 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))
不能保证等式的两个部分始终具有相同的一组值。在计算表达式的一部分时,可能会收到请求期间的新值,然后表达式的另一部分将具有一组不同的值。