1 聚合函数

除非另有说明,这里列出的所有函数都支持用于:

聚合函数可以与以下任一项配合使用:

  • 监控项历史数据,例如 min(/host/key,1h)
  • foreach 函数 作为唯一参数,例如 min(last_foreach(/*/key))(仅适用于计算监控项;不能用于触发器)

以下函数仅列出名称,不包含额外信息。点击函数可查看完整详情。

Function Description
avg 监控项在定义的评估周期内的平均值。
bucket_percentile 根据直方图的桶计算百分位数。
count foreach 函数返回的数组中的值数量。
histogram_quantile 根据直方图的桶计算 φ 分位数。
item_count 配置中与筛选条件匹配的现有监控项数量。
kurtosis 在定义的评估周期内,采集值概率分布的“尾部厚度”。
mad 在定义的评估周期内,采集值的中位数绝对偏差。
max 监控项在定义的评估周期内的最大值。
min 监控项在定义的评估周期内的最小值。
skewness 在定义的评估周期内,采集值概率分布的非对称性。
stddevpop 在定义的评估周期内,采集值的总体标准差。
stddevsamp 在定义的评估周期内,采集值的样本标准差。
sum 在定义的评估周期内,采集值的总和。
sumofsquares 在定义的评估周期内,采集值的平方和。
varpop 在定义的评估周期内,采集值的总体方差。
varsamp 在定义的评估周期内,采集值的样本方差。

常用参数

  • /host/key 是引用主机监控项历史数据的函数的通用必填第一个参数
  • (sec|#num)<:time shift> 是引用主机监控项历史数据的函数的通用第二个参数,其中:
    • sec - 以秒为单位的最大评估周期(可使用时间后缀),或者
    • #num - 最近收集值中的最大评估范围(如果前面带有井号)
    • time shift(可选)允许将评估点向过去移动。有关如何指定 time shift,请参见更多详情

函数详情

有关函数参数的一些一般说明:

  • 函数参数以逗号分隔
  • 可选函数参数(或参数部分)以 < > 表示
  • 每个函数的特定参数会在对应函数中说明
  • /host/key(sec|#num)<:time shift> 参数绝不能加引号
avg(/host/key,(sec|#num)<:time shift>)

监控项在定义的评估周期内的平均值。
支持的值类型:FloatInteger
支持的 foreach functionsavg_foreachcount_foreachexists_foreachlast_foreachmax_foreachmin_foreachsum_foreach

参数:请参见 common parameters

当需要将当前平均值与一段时间之前的平均值进行比较时,time shift 很有用。

示例:

avg(/host/key,1h) #计算截至当前、过去 1 小时内的平均值
avg(/host/key,#5) #计算最近 5 个值的平均值
avg(/host/key,1h:now-1d) #计算从 25 小时前到 24 小时前这一小时内的平均值
avg(last_foreach(/*/system.cpu.load[,avg1]?[group="MySQL Servers"])) #计算所有 MySQL 服务器的平均处理器负载
avg(/host/proc.num,5m)>300 #如果过去 5 分钟内的平均进程数高于 300,则触发器
bucket_percentile(item filter,time period,percentage)

从直方图的桶中计算百分位数。

参数:

注释:

  • 仅支持在计算项中使用;
  • 此函数是 histogram_quantile(percentage/100, bucket_rate_foreach(item filter, time period, 1)) 的别名。

示例:

bucket_percentile(/*/http_request_duration_seconds_bucket[*],5m,95) #计算 5 分钟内的第 95 百分位响应时间
bucket_percentile(/*/apiserver_request_duration_seconds_bucket[*],10m,99) #计算 API 延迟的第 99 百分位
count(func_foreach(item filter,<time period>),<operator>,<pattern>)

返回由 foreach 函数返回的数组中值的数量。
支持的 foreach functionsavg_foreachcount_foreachexists_foreachlast_foreachmax_foreachmin_foreachsum_foreach

参数:

  • func_foreach - 要统计返回值数量的 foreach 函数。详情请参见 foreach functions。请注意,count_foreach 和 bucket_rate_foreach 支持 附加参数
  • item filter - 参见 item filter;
  • time period - 参见 time period;
  • operator(必须用双引号括起来)。支持的 operators
    eq - 等于
    ne - 不等于
    gt - 大于
    ge - 大于或等于
    lt - 小于
    le - 小于或等于
    like - 当包含模式时匹配(区分大小写)
    bitand - 按位 AND
    regexp - 与 pattern 中给定的正则表达式进行区分大小写匹配
    iregexp - 与 pattern 中给定的正则表达式进行不区分大小写匹配
  • pattern - 所需的模式(字符串参数必须用双引号括起来);当第三个参数指定了 operator 时支持。

说明:

  • count() 与基于历史数据的 foreach 函数(max_foreach、avg_foreach 等)一起使用可能会影响性能,而仅处理配置数据的 exists_foreach() 则不会产生这种影响。
  • 可选参数 operatorpattern 在逗号后不能留空,只能完全省略。
  • 当第三个参数为 bitand 时,第四个 pattern 参数可以指定为两个数字,并用 '/' 分隔:number_to_compare_with/mask。count() 会对值和 mask 进行“按位 AND”运算,并将结果与 number_to_compare_with 比较。如果“按位 AND”的结果等于 number_to_compare_with,则该值会被计数。
    如果 number_to_compare_withmask 相等,则只需指定 mask(不带 '/')。
  • 当第三个参数为 regexpiregexp 时,第四个 pattern 参数可以是普通正则表达式或 全局 正则表达式(以 '@' 开头)。对于全局正则表达式,大小写敏感性继承自全局正则表达式设置。为了进行 regexp 匹配,浮点值将始终以小数点后 4 位表示。另请注意,对于较大的数值,十进制(存储在数据库中)和二进制(由 Zabbix 服务器使用)表示之间的差异可能会影响第 4 位小数。

示例:

count(max_foreach(/*/net.if.in[*],1h)) #计算截至当前过去一小时内收到数据的 net.if.in 监控项数量
count(last_foreach(/*/vfs.fs.size[*,pused]),"gt",95) #计算磁盘空间使用率超过 95% 的文件系统数量
histogram_quantile(quantile,bucket1,value1,bucket2,value2,...)

根据直方图的各个桶计算 φ 分位数。
支持 foreach functionbucket_rate_foreach

参数:

  • quantile - 0 ≤ φ ≤ 1;
  • bucketN, valueN - 手动输入的参数对(>=2),或 bucket_rate_foreach 的响应。

说明:

  • 仅支持在计算监控项中使用;
  • 功能上对应 PromQL 的 'histogram_quantile';
  • 如果最后一个 'Infinity' 桶("+inf")的值等于 0,则返回 -1。

示例:

histogram_quantile(0.75,1.0,last(/host/rate_bucket[1.0]),"+Inf",last(/host/rate_bucket[Inf]))
histogram_quantile(0.5,bucket_rate_foreach(//item_key,30s))
item_count(item filter)

配置中与筛选条件匹配的现有监控项数量。
支持的值类型:Integer

参数:

  • item filter - 监控项选择条件,允许按主机组、主机、监控项键值和标签进行引用。支持通配符。有关更多详细信息,请参见 item filter

注释:

  • 仅支持在计算型监控项中使用;
  • 作为 count(exists_foreach(item_filter)) 函数的别名。

示例:

item_count(/*/agent.ping?[group="Host group 1"]) #计算 "Host group 1" 中包含 agent.ping 监控项的主机数量
kurtosis(/host/key,(sec|#num)<:time shift>)

在定义的评估周期内,所收集值的概率分布的“尾部厚度”。另请参见:Kurtosis
支持的值类型:FloatInteger
支持的 foreach functionlast_foreach

参数:请参见 common parameters

示例:

kurtosis(/host/system.cpu.util[,user],5m)>5 #trigger on sharp spikes of CPU utilization over 5 minutes
mad(/host/key,(sec|#num)<:time shift>)

在定义的评估周期内,已收集值的中位数绝对偏差。另请参见:中位数绝对偏差
支持的值类型:FloatInteger
支持的 foreach functionlast_foreach

参数:请参见通用参数

示例:

last(/host/system.cpu.util[,user])>avg(/host/system.cpu.util[,user],1h)+3*mad(/host/system.cpu.util[,user],1h) #如果最后一个 CPU 利用率值在统计上显著,则触发器
max(/host/key,(sec|#num)<:time shift>)

在定义的评估周期内监控项的最大值。
支持的值类型:FloatInteger
支持的 foreach functionsavg_foreachcount_foreachexists_foreachlast_foreachmax_foreachmin_foreachsum_foreach

参数:请参见 common parameters

示例:

max(/host/key,1h) - min(/host/key,1h) #计算截至当前最近一小时内最大值和最小值之间的差值(值的 delta)
max(last_foreach(/*/vfs.fs.size[*,pused]?[group="Linux servers"])) #返回所有 Linux 服务器中最高的磁盘使用率
min(/host/key,(sec|#num)<:time shift>)

在定义的评估周期内,监控项的最低值。
支持的值类型:FloatInteger
支持的 foreach functionsavg_foreachcount_foreachexists_foreachlast_foreachmax_foreachmin_foreachsum_foreach

参数:请参见通用参数

示例:

max(/host/key,1h) - min(/host/key,1h) #计算截至当前最近一小时内最大值和最小值之间的差值(值的 delta)
min(last_foreach(/*/vfs.file.contents["/sys/class/net/enp0s3/operstate"]?[group="Linux servers"])) #返回所有 Linux 服务器中任意接口的最低运行状态
skewness(/host/key,(sec|#num)<:time shift>)

在定义的评估周期内,所收集值的概率分布的不对称性。另见:Skewness
支持的值类型:FloatInteger
支持的 foreach functionlast_foreach

参数:参见 common parameters

示例:

skewness(/host/vm.memory.size[used],5m)<-20 #trigger on sudden negative drops indicating crashes/restarts
stddevpop(/host/key,(sec|#num)<:time shift>)

在定义的评估周期内,已收集值的总体标准差。另请参见:Standard deviation
支持的值类型:FloatInteger
支持的 foreach functionlast_foreach

参数:请参见 common parameters

示例:

stddevpop(/host/system.cpu.util[,user],10m)>7 #如果 CPU 使用率波动很大则触发器(10 分钟内总体标准差大于 7)
stddevsamp(/host/key,(sec|#num)<:time shift>)

在定义的评估周期内,已收集值的样本标准差。另请参见:Standard deviation
支持的值类型:FloatInteger
支持的 foreach functionlast_foreach

参数:请参见 common parameters

此函数至少需要两个数据值才能工作。

示例:

stddevsamp(/host/system.cpu.util[,user],10m)>7 #如果 CPU 使用率波动很大,则触发器(样本标准差在 10 分钟内大于 7)
sum(/host/key,(sec|#num)<:time shift>)

在定义的评估周期内收集到的值之和。
支持的值类型:FloatInteger
支持的 foreach functionsavg_foreachcount_foreachexists_foreachlast_foreachmax_foreachmin_foreachsum_foreach

参数:请参见 common parameters

示例:

sum(last_foreach(/*/net.if.in[*]?[group="Linux servers"])) #计算所有 Linux 服务器的总入站网络流量
sum(last_foreach(/*/vfs.fs.size[/,total]?[group="MySQL Servers"])) #计算所有 MySQL 服务器的总磁盘空间
sum(last_foreach(/*/net.dns[*,*,*])) #计算成功 DNS 检查的总次数
sumofsquares(/host/key,(sec|#num)<:time shift>)

在定义的评估周期内收集到的值的平方和。
支持的值类型:FloatInteger
支持的 foreach functionlast_foreach

参数:请参见 common parameters

示例:

sumofsquares(/host/calculated.net.if.rate,1m) #网络流量速率(入站与出站)的平方和
sumofsquares(last_foreach(/*/net.if.in[*]?[group="Linux servers"])) #所有 Linux 服务器中最新入站网络流量值的平方和
varpop(/host/key,(sec|#num)<:time shift>)

在定义的评估周期内收集到的值的总体方差。另请参见:Variance
支持的值类型:FloatInteger
支持的 foreach functionlast_foreach

参数:请参见 common parameters

示例:

varpop(/host/system.cpu.util[,user],10m)>50 #如果 CPU 使用率波动很大,则触发器(10 分钟内方差大于 50)
varsamp(/host/key,(sec|#num)<:time shift>)

在定义的评估周期内采集到的值的样本方差。另请参见:Variance
支持的值类型:FloatInteger
支持的 foreach functionlast_foreach

参数:请参见 common parameters

此函数至少需要两个数据值才能工作。

示例:

varsamp(/host/system.cpu.util[,user],10m)>50 #如果 CPU 使用率波动很大,则触发器(10 分钟内的样本方差大于 50)

请参阅所有受支持的函数