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

7 计算监控项

概述

你可以基于其它监控项创建计算监控项。

因此,计算监控项是创建虚拟数据源的一种方式。这些值将根据算术表达式定期计算。所有计算都由Zabbix服务器完成,与Zabbix代理或代理服务器执行的计算无关。

生成的数据将存储在Zabbix数据库中,与其它任何监控项一样 - 这意味着存储历史和趋势值,以便快速生成图表。 计算的监控项可用于触发器表达式,由宏或其它实体引用,与任何其它监控项类型相同。

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

可配置字段

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

计算定义应在Formula字段中输入。公式和密钥之间几乎没有连接。Key参数不能以任何方式用于公式中。

一个简单公式的正确语法是:

func(<key>|<hostname:key>,<parameter1>,<parameter2>,...)

当:

参数 定
func 触发器表达式支持的functions:last、min、max、avg、count等
key 其数据要使用的另一个监控项的密钥。它可以被定义为key或hostname:key。
注意: 将整个Key放在双引号(“...”)中,强烈建议避免由于Key内的空格或逗号而导致错误的解析。
如果Key中也有引用的参数,则必须使用反斜杠(\)来转义这些双引号。 参考下面的 示例5
parameter(s) 功能参数(如果需要)。

<note tip>从计算监控项公式引用的所有监控项都必须存在并且正在收集数据(功能和不支持的监控项除外)。另外,如果更改引用监控项的Key,则必须使用该Key手动更新任一公式。 :::

<note important>如果用于引用函数参数或常量,公式中的用户宏将被扩展。如果引用函数、主机名、监控项Key、监控项key参数或运算符,则用户宏将不会被扩展。 :::

更复杂的公式可以使用函数,运算符和括号的组合。你可以使用触发器表达式支持的所有功能和operators 。请注意,语法略有不同,但逻辑和运算符优先级完全相同。

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

如果计算结果为浮点值,且如果计算的信息类型为Numeric(无符号),则该值将被修剪为整数。

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

  1. 参考监控项
  2. 没有数据来计算一个函数
  3. 被零除
  4. 使用不正确的语法

在Zabbix 1.8.1中引入了对计算监控项的支持。
从Zabbix3.2开始,计算监控项在某些情况下可能涉及不符合要求的项目,如这些所述 功能和不受支持的监控项, 具有不支持的监控项和未知值的表达式操作.

用法示例

示例 1

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

使用last功能:

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

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

示例 2

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

使用avg功能:

avg("Zabbix Server:zabbix[wcache,values]",600)

请注意,大量使用长时间计算的监控项可能会影响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]"))
示例 5

在计算监控项中正确使用聚合。

记下双引号在引号键内如何转义:

last("grpsum[\"video\",\"net.if.out[eth0,bytes]\",\"last\"]") / last("grpsum[\"video\",\"nginx_stat.sh[active]\",\"last\"]")