7 计算型 监控项

概述

一个计算型 监控项 允许基于一些已有 监控项 的值进行 create 计算。例如,你可能想要计算某个 监控项 值的小时平均值,或者计算一组 监控项 的总值。这就是计算型 监控项 的用途。

计算可以使用以下两种方式:

  • 单个 监控项 的单独值
  • 复杂过滤器用于选择多个 监控项 进行聚合(详情请参阅 aggregate calculations

计算型 监控项 是创建虚拟数据源的一种方式。所有计算仅由 Zabbix server 完成。这些值会基于使用的算术表达式定期计算。

生成的数据将存储在 Zabbix 数据库中,与任何其他 监控项 一样;历史值和趋势值都会被存储,并且可以生成图表。

如果计算结果是一个 float 值,并且该计算型 监控项 的信息类型为数值(无符号),则结果将被截断为一个 integer。

此外,如果缓存中没有最近的数据,且函数中未定义查询时间段,则 Zabbix 默认会回溯至多一周的时间,以从数据库中 query 历史值。

计算型 监控项 与其触发器的 expressions 共享语法。在计算型 监控项 中允许与字符串进行比较。计算型 监控项 可以像任何其他 监控项 类型一样被宏或其他实体引用。

要使用计算型 监控项,请选择 监控项 类型为 Calculated(计算型)

可配置字段

是唯一的监控项标识符(每个主机)。您可以使用支持的符号create任何键名。

计算定义应输入在公式字段中。公式与键之间没有关联。键参数不会以任何方式在公式中使用。

简单公式的语法如下:

function(/host/key,<parameter1>,<parameter2>,...)

其中:

函数 supported functions之一:last、min、max、avg、count等
主机 用于计算的监控项的主机。
当前主机可以省略(例如function(//key,parameter,...)中所示)。
用于计算的监控项的键。
参数 函数所需的参数(如有)。
支持时间后缀memory大小后缀

User macros 在公式中引用函数参数、监控项过滤器参数或常量时会被展开。如果引用函数、主机名、监控项键、监控项键参数或运算符,用户宏将不会被展开。

更复杂的公式可以结合使用函数、运算符和括号。您可以使用触发器表达式中支持的所有函数和运算符。逻辑和运算符优先级完全相同。

与触发器表达式不同,Zabbix根据监控项的update间隔处理计算监控项,而不是在接收到新值时处理。

计算监控项公式中历史函数引用的所有监控项必须存在并正在收集数据。此外,如果更改被引用监控项的监控项键,您需要手动update使用该键的所有公式。

计算监控项在以下情况下可能变为不支持:

  • 引用的监控项
    • 未找到
    • 已禁用
    • 属于已禁用的主机
    • 不支持(nodata()函数和具有未知值的运算符除外)
  • 无数据可用于计算函数
  • 除以零
  • 使用了错误的语法

使用示例

示例1

计算根目录 '/' 上的可用磁盘空间百分比。

使用 last 函数:

100*last(//vfs.fs.size[/,free])/last(//vfs.fs.size[/,total])

Zabbix 将获取最新的可用磁盘空间和总磁盘空间值,并根据给定的公式计算百分比。

示例2

计算由Zabbix处理的值数量的10分钟平均值。

使用函数avg

avg(/Zabbix server/zabbix[wcache,values],10m)

请注意,大量使用带有长时间周期的计算监控项可能会影响Zabbix server的性能。

示例3

计算 eth0 上的总带宽。

两个函数的和:

last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes])
示例4

计算入站流量的百分比。

更复杂的表达式:

100*last(//net.if.in[eth0,bytes])/(last(//net.if.in[eth0,bytes])+last(//net.if.out[eth0,bytes]))

另见:使用示例