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

1 Foreach 函数

概述

foreach 函数在聚合计算中使用,以返回由使用的监控项过滤选择的每个监控项的聚合值。返回值是一个数组。

例如,avg_foreach函数将返回一个值数组,其中每个值是选定监控项在指定时间间隔内的平均历史值。

监控项过滤是foreach函数使用的语法的一部分。监控项过滤支持使用通配符,因此可以相当灵活地选择所需监控项。

支持的函数

函数 描述
avg_foreach 返回每个监控项的平均值。
bucket_rate_foreach 返回适用于histogram_quantile()函数的配对(bucket upper bound, rate value),其中"bucket upper bound"是由<参数编号> 参数定义的监控项键的参数值。
count_foreach 返回每个监控项的值的数量。
exists_foreach 对于每个启用的监控项返回'1'。
last_foreach 返回每个监控项的最后一个值。
max_foreach 返回每个监控项的最大值。
min_foreach 返回每个监控项的最小值。
sum_foreach 返回每个监控项的值的总和。

参数

Foreach 函数支持两个常用参数 - 监控项过滤器和时间段:

foreach_function(item filter,time period)

例如:

avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m)

一些函数支持附加参数。

监控项过滤语法

监控项过滤:

/主机/键[参数]?[条件]

由四部分组成,分别是:

  • 主机 - 主机名
  • 键 - 监控项键(不带参数)
  • 参数 - 监控项键参数
  • 条件 - 基于主机组和/或监控项标签的条件(作为表达式)

条件表达式内部允许有空格。

通配符使用

  • 通配符可用于替换主机名、监控项键或单个监控项键参数。
  • 主机或监控项键必须指定而不含通配符。因此 /主机/*/*/键 是有效的过滤,但 /*/* 是无效的。
  • 通配符不能用于主机名、监控项键、监控项键参数的部分
  • 通配符不匹配超过一个监控项键参数。因此必须为每个参数单独指定通配符(即 键[abc,*,*])。

条件表达式

条件表达式支持:

  • 操作数:
    • 组 - 主机组
    • 标签 - 监控项标签
    • "<文本>" - 字符串常量,使用 \ 转义字符来转义 "\
  • 区分大小写的字符串比较运算符:=, <>
  • 逻辑运算符:and, or, not
  • 使用括号进行分组:( )

字符串常量的引用是必须的。只支持区分大小写的全字符串比较。

在过滤中指定标签时(即 标签="tagname:value"),冒号 : 用作分隔符。 它之后的所有内容都被视为标签值。因此,当前不支持在其中指定包含 : 的标签名。

示例

可以使用复杂的过滤,引用监控项键、主机组和标签,示例如下:

语法示例 描述
/主机/键[abc,*] 匹配此主机上的类似监控项。
/*/键 匹配任何主机的相同监控项。
/*/键?[组="ABC" 且 标签="tagname:value"] 匹配来自ABC组的任何主机的相同监控项,具有 'tagname:value' 标签。
/*/键[a,*,c]?[(组="ABC" 且 标签="Tag1") 或 (组="DEF" 且 (标签="Tag2" 或 标签="Tag3:value"))] 匹配来自ABC或DEF组的任何主机的类似监控项,并具有相应的标签。

所有引用的监控项必须存在并收集数据。只有在启用的主机上启用的监控项才包括在计算中。

如果引用的监控项的监控项键被更改, 必须手动更新过滤。

指定父主机组包括父组和所有嵌套的主机组及其监控项。

时间段

second 参数允许指定时间段 聚合。时间段只能表示为时间,数量 不支持值(以 # 为前缀)。

Supported unit symbols 可以用在这个 为方便起见参数,例如“5m”(五分钟)而不是 '300s'(300 秒)或 '1d'(一天)而不是 '86400'(86400 秒)。

如果与 last_foreach 一起传递,服务器将忽略时间段 函数,因此可以省略:

last_foreach(/*/key?[group="host group"])

exists_foreach 函数不支持时间段。

附加参数

bucket_rate_foreach 支持第三个可选参数 功能:

bucket_rate_foreach(item filter,time period,<parameter number>)

其中 <parameter number> 是“bucket”值在 监控项键。例如,如果 myItem[aaa,0.2] 中的“bucket”值为 '0.2',则其位置为 2。

<parameter number> 的默认值为“1”。

依据可用性的行为

下表说明了在主机/项目和历史数据的可用性有限的情况下,每个函数的行为。

函数 禁用主机 有数据的主机不可用 没有数据的主机不可用 禁用监控项 不支持的监控项 数据检索错误(SQL)
avg_foreach 忽略 返回平均值 忽略 忽略 忽略 忽略
bucket_rate_foreach 忽略 返回桶速率 忽略 忽略 忽略 忽略
count_foreach 忽略 返回计数 0 忽略 忽略 忽略
exists_foreach 忽略 1 1 忽略 1 n/a
last_foreach 忽略 返回最后的值 忽略 忽略 忽略 忽略
max_foreach 忽略 返回最大值 忽略 忽略 忽略 忽略
min_foreach 忽略 返回最小值 忽略 忽略 忽略 忽略
sum_foreach 忽略 饭回值的和 忽略 忽略 忽略 忽略

如果忽略该项,则不会向聚合中添加任何内容。