4 历史数据函数

以下位置支持此处列出的所有函数:

此处列出这些函数时未包含附加信息。点击某个函数可查看其详细信息。

函数 描述
change 前一个值与最新值之间的差值大小。
changecount 在定义的评估周期内相邻值之间变化的次数。
count 在定义的评估周期内的值数量。
countunique 在定义的评估周期内的唯一值数量。
find 在定义的评估周期内查找值匹配项。
first 定义评估周期内的第一个(最旧的)值。
fuzzytime 检查被动 agent 时间与 Zabbix server/proxy 时间之间的差异。
last 最近的值。
logeventid 检查最后一条日志条目的事件ID是否与正则表达式匹配。
logseverity 最后一条日志条目的日志严重性。
logsource 检查最后一条日志条目的日志来源是否与正则表达式匹配。
monodec 检查值是否持续减少。
monoinc 检查值是否持续增加。
nodata 检查是否未接收到数据。
percentile 一个周期的P百分位数,其中P(百分比)由第三个参数指定。
rate 在定义的时间周期内单调递增计数器每秒的平均增长速率。
通用参数
  • /host/key 是函数中常见的必选第一个参数 引用主机 监控项历史记录
  • (sec|#num)<:time shift> 是该函数常用的第二个参数 引用主机的监控项历史记录的函数,其中:
    • - 最大 评估周期,单位为秒 (可以使用时间 suffixes),或
    • #num - 最新版本中的最大 评估周期 收集的值(如果前面有井号标记)
    • 时间偏移(可选)允许移动评估点 返回到过去。请参阅时间偏移上的内容 指定时间偏移。

函数详情

关于函数参数的一些通用说明:

  • 函数参数之间用逗号分隔
  • 可选的函数参数(或参数部分)用 < > 表示
  • 特定函数的参数会在每个函数中分别描述
  • /host/key(sec|#num)<:time shift> 参数永远不要加引号
change(/host/key)

前一个值和最新值之间的差值。
支持的值类型:floatintegerstring文本日志
对于字符串返回:0 - 值相等;1 - 值不同。

参数:请参见 通用参数

备注:

  • 数值差值将按以下示例传入的值 ('前一个' 与 '最新一个' 值 = 变化) 进行计算:
    '1' 和 '5' = +4
    '3' 和 '1' = -2
    '0' 和 '-2.5' = -2.5
  • 另请参阅:abs 用于比较。

示例:

change(/主机/key)>10
changecount(/host/key,(sec|#num)<:time shift>,<mode>)

在定义的评估周期内相邻值之间变化的次数。
支持的值类型:float, integer, string, 文本, 日志

参数:

  • 参见 通用参数
  • mode(必须用双引号括起) - 可选值:all - 统计所有变化(默认);dec - 统计减少次数;inc - 统计增加次数。

对于非数值类型的值,mode 参数将被忽略。

示例:

changecount(/主机/key,1w) # 过去一周内的数值变化次数(状态变更次数统计)
       changecount(/主机/key,#10,"inc") # 最近10个值中相对前值增加的次数(局部单调性检测:value[n] > value[n-1])
       changecount(/主机/key,24h,"dec") # 过去24小时内相对前值减少的次数(下降趋势统计:value[n] < value[n-1])
count(/host/key,(sec|#num)<:time shift>,<operator>,<pattern>)

定义的评估周期内的值的数量。 支持的值类型:floatintegerstring、文本、日志。

参数:

  • 参见 常见参数
  • 运算符(必须用双引号括起)。支持的 operators
    eq - 等于(默认用于 integer、float)
    ne - 不等于
    gt - 大于
    ge - 大于或等于
    lt - 小于
    le - 小于或等于
    like(默认用于 string、文本、日志)- 包含模式匹配(区分大小写)
    bitand - 按位与
    regexp - 区分大小写地匹配 pattern 中给出的正则表达式
    iregexp - 不区分大小写地匹配 pattern 中给出的正则表达式
  • pattern - 所需的模式(string 参数必须用双引号括起来)。

注释:

  • 浮点型监控项 与 2.22e-16 的精度匹配;
  • like 运算符不支持用于 integer 值;
  • likebitand 不被支持作为 float 值的操作符;
  • 对于 string、文本和日志值,仅支持 eqnelikeregexpiregexp 运算符;
  • 使用 bitand 作为运算符时,第四个 pattern 参数可以指定为两个数字,用“/”分隔:要比较的数字/掩码。count() 会从值和 掩码 计算“按位与”,然后将结果与 要比较的数字 进行比较。如果“按位与”的结果等于 要比较的数字,则该值会计数。
    如果 要比较的数字掩码 相等,则只需指定 掩码(不带“/”)。
  • 使用 regexpiregexp 作为操作符时,第四个 pattern 参数可以是普通正则表达式或全局正则表达式(以 '@' 开头)。对于全局正则表达式,其大小写敏感性继承自全局正则表达式设置。在正则表达式匹配时,float 值始终以 4 小数点后两位的格式表示。还需注意,对于大数值,其十进制(存储在数据库中)与二进制(由 Zabbix server 使用)表示之间的差异可能会影响小数点后第四位。

示例:

`count(/主机/key,10m)` #当前时间往前 10 分钟的值
       count(/主机/key,10m,"like","error") #the 过去10分钟内包含'error'的数值数量(字符串匹配计数)
       count(/主机/key,10m,,12) #当前的 过去10分钟内等于'12'的数值数量(精确匹配:value == 12)
       count(/主机/key,10m,"gt",12) #这个 过去10分钟内大于'12'的数值数量(数值过滤计数)
       count(/主机/key,#10,"gt",12) #the 最近10个值中大于'12'的数值数量(滑动窗口统计)
       count(/主机/key,10m:now-1d,"gt",12) #the 24小时前至10分钟前与24小时前之间大于'12'的数值数量(跨周期数据对比)
       count(/主机/key,10m,"bitand","6/7") # 最近过去10分钟内的数值数量(总数据点数,含重复值)中3最低有效位为'110'(二进制)的情况
       count(/主机/key,10m:now-1d) #the 24小时前至10分钟前与24小时前之间的数值数量(历史数据量对比)
countunique(/host/key,(sec|#num)<:time shift>,<operator>,<pattern>)

在定义的评估周期内唯一值的数量。
支持的值类型:float, integer, string, 文本, 日志

参数:

  • 参见通用参数
  • operator(必须用双引号括起)。支持的operators
    eq - 等于(默认用于 integer, float)
    ne - 不等于
    gt - 大于
    ge - 大于或等于
    lt - 小于
    le - 小于或等于
    like(默认用于 string, 文本, 日志)- 包含模式匹配(区分大小写)
    bitand - 按位与
    regexp - 区分大小写的正则表达式匹配,正则表达式在 pattern 中给出
    iregexp - 不区分大小写的正则表达式匹配,正则表达式在 pattern 中给出
  • pattern - 所需的模式(string 参数必须用双引号括起)。

注释:

  • 浮点型监控项 匹配精度为 2.22e-16;
  • like 不支持作为 integer 值的操作符;
  • likebitand 不支持作为 float 值的操作符;
  • 对于 string、文本和日志值,仅支持 eqnelikeregexpiregexp 操作符;
  • 当操作符为 bitand 时,第四个 pattern 参数可以指定为两个数字,用 '/' 分隔:number_to_compare_with/mask。countunique() 会计算值与 mask 的“按位与”,并将结果与 number_to_compare_with 进行比较。如果“按位与”的结果等于 number_to_compare_with,则该值将被计数。
    如果 number_to_compare_withmask 相等,则只需指定 mask(不带 '/')。
  • 当操作符为 regexpiregexp 时,第四个 pattern 参数可以是普通正则表达式或全局正则表达式(以 '@' 开头)。对于全局正则表达式,区分大小写由全局正则表达式设置继承。为了进行正则匹配,float 值将始终以4个小数位表示。请注意,对于大数,小数(存储在数据库中)和二进制(由 Zabbix server 使用)表示之间的差异可能影响第4个小数位。

示例:

countunique(/主机/key,10m) # 过去10分钟内的唯一值数量(统计时间窗口:now-10m → now)
       countunique(/主机/key,10m,"like","error") # 过去10分钟内包含'error'的唯一值数量(附加条件:值包含"error"字符串)
       countunique(/主机/key,10m,,12) # 等于 '12' 的 过去10分钟内的唯一值数量(统计时间窗口:now-10m → now)
       countunique(/主机/key,10m,"gt",12) # 过去10分钟内大于'12'的唯一值数量(数值比较:value > 12)
       countunique(/主机/key,#10,"gt",12) # 最近10个值中大于'12'的唯一值数量(样本范围:最后10个数据点)
       countunique(/主机/key,10m:now-1d,"gt",12) # 24小时前至10分钟前与24小时前之间大于'12'的唯一值数量(时间窗口:[T-24h, T-10m] ∩ [T-48h, T-24h])
       countunique(/主机/key,10m,"bitand","6/7") # 最低位 3 位中包含 '110'(二进制)的 过去10分钟内的唯一值数量(统计时间窗口:now-10m → now)
       countunique(/主机/key,10m:now-1d) # 24小时前至10分钟前与24小时前之间的唯一值数量(双重时间范围对比)
find(/host/key,(sec|#num)<:time shift>,<operator>,<pattern>)

在定义的评估周期内查找值匹配。
支持的值类型:floatintegerstring文本日志
返回值:1 - 找到;0 - 否则。

参数:

  • 参见 通用参数
  • sec#num(可选) - 如果未指定,默认为最新值;
  • operator(必须用双引号括起)。支持的 operators
    eq - 等于(默认用于 integer、float)
    ne - 不等于
    gt - 大于
    ge - 大于或等于
    lt - 小于
    le - 小于或等于
    like(默认用于 string、文本、日志) - 如果包含在 pattern 中指定的 string,则匹配(区分大小写)
    bitand - 按位与
    regexp - 匹配在 pattern 中指定的正则表达式(区分大小写)
    iregexp - 匹配在 pattern 中指定的正则表达式(不区分大小写)
  • pattern - 所需的模式(string 参数必须用双引号括起);如果 operatorregexpiregexp,则为 Perl Compatible Regular Expression(PCRE)正则表达式。

备注:

  • 如果处理多个值,则只要至少有一个值匹配,就会返回 '1';
  • like 不支持作为 integer 值的操作符;
  • likebitand 不支持作为 float 值的操作符;
  • 对于 string、文本和日志值,仅支持 eqnelikeregexpiregexp 操作符;
  • 当操作符为 regexpiregexp 时,第四个 pattern 参数可以是普通正则表达式或 全局正则表达式(以 '@' 开头)正则表达式。对于全局正则表达式,其大小写敏感性继承自全局正则表达式设置。

示例:

find(/主机/key,10m,"like","error") #查找在最近 10 分钟内包含 '错误' 的值
first(/host/key,sec<:time shift>)

在定义的评估周期内第一个(最早的)值。
支持的值类型:floatintegerstring文本日志

参数:

另见 last()

示例:

first(/主机/key,1h) #检索从当前时间往前一小时内的最早值
fuzzytime(/host/key,sec)

检查被动的 agent 时间与 Zabbix server/proxy 时间之间的差异。
支持的值类型:floatinteger
返回值:1 - 如果被动的 监控项 值(作为时间戳)与 Zabbix server/proxy 时间戳(值收集时钟)之间的差异小于或等于 sec 秒;否则返回 0。

参数:

备注:

  • 通常与 'system.localtime' 监控项 一起使用,以检查本地时间是否与 Zabbix server 的本地时间同步。注意:'system.localtime' 必须配置为一个 被动检查
  • 也可以与 vfs.file.time[/path/file,modify] 键一起使用,以检查 file 是否长时间未 get 更新;
  • 不建议在复杂的触发器表达式(包含多个 监控项)中使用此函数,因为它可能导致意外结果(时间差异将根据最近的指标进行测量),例如在 fuzzytime(/Host/system.localtime,60s)=0 or last(/Host/trap)<>0 中。

示例:

fuzzytime(/主机/key,60s)=0 # 如果时间差超过 60 秒,则检测问题

last(/host/key,<#num<:time shift>>)

最新值。
支持的值类型:floatintegerstring文本日志

参数:

  • 参见 通用参数
  • #num(可选)- 第N个最新的值。

备注:

  • 注意此处带井号的时间周期(#N)与其他许多函数中的使用方式不同。例如:last(/host/key) 总是等于 last(/host/key,#1)last(/host/key,#3) 表示第三个最新的值(不是最近的三个值);
  • 如果历史数据中同一秒存在两个以上的值,Zabbix 无法保证值的顺序;
  • 参见 first()

示例:

last(/主机/key) #获取最新值
       last(/主机/key,#2) #获取上一个值
       last(/主机/key,#1) <> last(/主机/key,#2) #最新值与上一个值不同
logeventid(/host/key,<#num<:time shift>>,<pattern>)

检查最后一条日志条目的事件ID是否匹配正则表达式。
支持的值类型:日志
返回:0 - 不匹配;1 - 匹配。

参数:

logseverity(/host/key,<#num<:time shift>>)

最后一条日志条目的日志严重性。
支持的值类型:日志
返回值:0 - 默认严重性;N - 严重性(integer,适用于Windows事件日志:1 - 信息,2 - 警告,4 - 错误,7 - 失败审核,8 - 成功审核,9 - 严重,10 - 详细)。

参数:

  • 参见 通用参数
  • #num(可选) - 第#num个最近的值。

Zabbix从Windows事件日志的信息字段获取日志严重性。

logsource(/host/key,<#num<:time shift>>,<pattern>)

检查最后一条日志条目的日志来源是否匹配正则表达式。
支持的值类型:日志
返回值:0 - 不匹配;1 - 匹配。

参数:

  • 参见 通用参数
  • #num(可选) - 第几个最近的值;
  • pattern(可选) - 描述所需模式的正则表达式,采用Perl Compatible Regular Expression(PCRE)风格(string参数必须用双引号括起)。

通常用于 Windows 事件日志。

示例:

logsource(/主机/key,,"VMware Server")
monodec(/host/key,(sec|#num)<:time shift>,<mode>)

检查值是否出现了单调递减。
支持的值类型:integer
返回值:1 - 如果时间段内的所有元素持续递减;0 - 否则。

参数:

  • 参见 通用参数
  • mode(必须用双引号括起)- weak(每个值都小于或等于前一个值;默认)或 strict(每个值都已减少)。

示例:

monodec(/Host1/system.swap.size[all,free],60s) + monodec(/Host2/system.swap.size[all,free],60s) + monodec(/Host3/system.swap.size[all,free],60s) # 计算在多少个 主机 中发生了空闲交换空间大小的减少
monoinc(/host/key,(sec|#num)<:time shift>,<mode>)

检查值是否单调递增。
支持的值类型:integer
返回值:1 - 如果时间段内的所有元素持续增加;0 - 否则。

参数:

  • 参见 通用参数
  • mode(必须用双引号括起)- weak(每个值都大于或等于前一个值;默认)或 strict(每个值都必须增加)。

示例:

monoinc(/Host1/system.localtime,#3,"strict")=0 # 检查系统本地时间是否持续增加
nodata(/host/key,sec,<mode>)

检查未收到数据。
支持的值类型:integerfloat字符文本日志
返回值:1 - 如果在定义的时间段内未收到数据;0 - 否则。

参数:

  • 参见 通用参数
  • sec - 该时间段不应小于 30 秒,因为历史同步进程仅每 30 秒计算一次此函数;不允许使用 nodata(/host/key,0)
  • mode - 如果设置为 strict(双引号括起),此函数将对 proxy 可用性不敏感(详见注释)。

注释:

  • 默认情况下,由 proxy 监控的 'nodata' 触发器对 proxy 的可用性敏感 - 如果 proxy 不可用,则在连接恢复后 'nodata' 触发器不会立即触发,而是跳过延迟期间的数据。请注意,对于被动式 proxies,如果连接在超过 15 秒且不少于 2 秒后恢复,则会激活抑制功能。对于主动式 proxies,如果连接在超过 15 秒后恢复,则会激活抑制功能。要关闭对 proxy 可用性的敏感性,请使用第三个参数,例如:nodata(/host/key,5m,"strict");在这种情况下,只要无数据的评估周期(五分钟)结束,函数就会触发。
  • 如果在第一个参数的时间段内发生以下情况,此函数将显示错误:
    - 无数据且 Zabbix server 重新启动
    - 无数据且维护已完成
    - 无数据且 监控项 已添加或重新启用
  • 错误将在触发器 configurationInfo 列中显示;
  • 如果 Zabbix server、proxy 和 agent 之间存在时间差异,此函数可能无法正常工作。另请参见:时间同步
  • nodata() 函数不能单独在表达式中使用;表达式中必须至少包含一个来自 another group 的函数,引用 主机 监控项(date and time functions 除外)。有关 nodata() 函数在表达式中的工作方式的详细信息,请参见 计算时间
percentile(/host/key,(sec|#num)<:time shift>,percentage)

某一时间段的 P 百分位数,其中 P(百分比)由第三个参数指定。
支持的值类型:floatinteger

参数:

  • 参见 通用参数
  • percentage - 介于 0 和 100(含)之间的浮点数,小数点后最多包含 4 位数字。
rate(/host/key,sec<:time shift>)

在定义的时间段内,单调递增计数器增加的每秒平均速率。
支持的值类型:float, integer

参数:

功能上对应于 PromQL 的 'rate'。

示例:

rate(/主机/key,30s) #如果在 30 秒内单调递增为 20,此函数将返回 0.67。

请参见 all supported functions