2022 Zabbix中国峰会
2022 Zabbix中国峰会

7 可计算监控项

概述

计算项允许基于某些现有项的值创建计算。例如,您可能想要计算某些项值的每小时平均值或计算一组项的总值。这就是计算项的用途。

计算可能同时使用:

  • 单个项的单个值
  • 用于选择多个项进行聚合的复杂过滤器(有关详细信息,请参阅 聚合计算

计算项是创建虚拟数据源的一种方式。所有计算都仅由 Zabbix 服务器完成。根据使用的算术表达式定期计算值。

结果数据与任何其他项一样存储在 Zabbix 数据库中;历史值和趋势值均已存储,并且可以生成图表。

如果计算结果为浮点值,则如果计算项信息类型为 数字(无符号),则它将被修剪为整数。

此外,如果缓存中没有最近的数据,并且函数中没有定义的查询期,则 Zabbix 将默认回溯到过去一周的时间以查询数据库的历史值。

计算项与触发器 表达式 共享其语法。计算项中允许与字符串进行比较。计算项可能被 宏或其他实体引用,就像任何其他项类型一样。

要使用计算项,请选择项类型计算

可配置字段

key 是每个主机的唯一监控项标识符。您可以使用支持的符号创建任何key 名称。

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

简单公式的语法是:

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

其中:

function 支持的函数 之一:last、min、max、avg、count 等
host 用于计算的监控项的主机。
可以省略当前主机(即 function(//key,parameter,...))。
key 用于计算的监控项的 key。
参数 函数的参数(如果需要)。

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

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

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

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

计算项在以下几种情况下可能不受支持:

  • 引用项
  • 未找到
  • 已禁用
  • 属于已禁用的主机
  • 不受支持(除 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 服务器的性能。

示例 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]))

另请参阅: 聚合计算示例