1 聚合计算

概述

聚合计算是一种 计算项目 类型,允许 Zabbix 服务器从多个项目收集信息,然后根据所使用的聚合函数计算聚合。

聚合计算不需要在受监控的主机上运行任何代理。

语法

要检索聚合数据,请使用受支持的聚合函数之一:avgmaxminsum等。 然后将foreach函数作为唯一参数添加,并使用其监控项过滤器选择所需的监控项:

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

foreach函数(例如avg_foreachcount_foreach等)为每个选定的监控项返回一个聚合值。 监控项通过使用监控项过滤器(/host/key?[group="host group"])从监控项历史中选择。更多详情,请参阅 foreach函数

如果某些监控项在请求的周期内没有数据,它们在计算中将被忽略。如果没有监控项有数据,函数将返回错误。

或者,您可以将多个监控项作为参数列出以进行聚合:

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

主机组“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))

不能保证等式的两个部分始终具有相同的一组值。在计算表达式的一部分时,可能会收到请求期间的新值,然后表达式的另一部分将具有一组不同的值。