这是原厂英文文档的翻译页面. 欢迎帮助我们 完善文档.
2022 Zabbix中国峰会
2022 Zabbix中国峰会

4 历史函数

此处列出的所有函数都支持:

关于函数参数的一些整体说明:

  • 函数参数用逗号分隔
  • 可选函数参数(或参数部分)由< >表示
  • 每个函数都描述了特定功能的参数
  • /host/key(sec|#num)<:time shift> 参数绝不能被引用
常用参数
  • /host/key 是引用主机监控项历史记录函数的常用强制性首选参数
  • (sec|#num)<:time shift> 是引用主机监控项历史记录函数的常用强制性次选参数 ,其中:
    • sec - 以秒为单位的最大 评估周期 (可以使用时间 后缀 ),或者
    • #num - 最新收集值最大 评估范围(如果前面有井号)
    • time shift (可选) 允许将评估点及时移回。参阅有关指定时间偏移 更多详细内容

历史函数

函数
描述 函数专用参数 注释
baselinedev (/host/key,data period:time shift,season_unit,num_seasons)
返回最后一个数据周期与前几个时间段的相同数据周期之间的偏差数(通过stddevpop算法) data period - 一段时间内的数据收集周期,定义为<N><time unit> 其中
N - 时间单位的量度
time unit - h (小时), d (天), w (周), M (月) 或y (年), 必须等于或小于这个时间段

Time shift - 时间段偏移量(参见示例)

season_unit - 一个season的持续时间 (h, d, w, M, y), 不能小于数据周期

num_seasons - season的数量评估
示例:
=> baselinedev(/host/key,1d:now/d,"M",6) → 计算前6个月前一天和同一天的标准差(总体)数。如果上个月不存在该日期,则将使用该月的最后一天(7月31日将根据1月31日、2月28日、... 6月30日进行分析)。
=> baselinedev(/host/key,1h:now/h,"d",10) → 计算前一小时与前十天同一小时内的标准差(总体)数。
baselinewma (/host/key,data period:time shift,season_unit,num_seasons)
通过使用加权移动平均算法在多个相等时间段('seasons')中对同一时间范围内的数据进行平均来计算基线。 data period - 一段时间内的数据收集周期,定义为<N><time unit> 其中
N - 时间单位的量度
time unit - h (小时), d (天), w (周), M (月) 或 y (年), 必须等于或小于这个时间段

Time shift - 时间段偏移量,以season为单位定义数据收集时间范围的结束(参见示例)

season_unit - 一个season的持续时间 (h, d, w, M, y), 不能小于数据周期

num_seasons - season的数量评估
示例:
=> baselinewma(/host/key,1h:now/h,"d",3) → 根据昨天结束的3天内最后一个完整小时计算基线。如果“现在”是周一13:30,则分析周五、周六、周日12:00-12:59的数据。
=> baselinemwa(/host/key,2h:now/h,"d",3) → 根据昨天结束的3天内最后两个小时计算基线。如果“现在”是周一13:30,则分析周五、周六、周日10:00-11:59的数据。
=> baselinewma(/host/key,1d:now/d,"M",4) → 根据前4个月的最后1天计算基线,不包括最后一个完整月份。如果今天是 9月1日,则为7月31日、6月30日、5 月31日的数据。
change (/host/key)
前一个值和最新值之间的差异量。 支持的值类型: float, int, str, text, log

对于字符串返回:
0 - 值相等
1 - 值不同

示例:
=> change(/host/key)>10

将计算数值差异,例如这些传入示例值 ('previous' 和 'latest' value = difference):
'1' and '5' = +4
'3' and '1' = -2
'0' and '-2.5' = -2.5

另外: abs 进行比较
changecount (/host/key,(sec|#num)<:time shift>,<mode>)
在定义的评估期内相邻值之间的变化次数。 参见常用参数.

mode (可选;必须使用双引号)

支持modes:
all - 计算所有更改(默认)
dec - 减少计数
inc - 增加计数
支持的值类型: float, int, str, text, log

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

示例:
=> changecount(/host/key, 1w) → 到现在为止的最近一周值变化次数
=> changecount(/host/key,#10,"inc") → 值增加的次数(相对于相邻value) 在最后10个值中
=> changecount(/host/key,24h,"dec") → 到现在为止的过去 24 小时内值减少的数量(相对于相邻值)
count (/host/key,(sec|#num)<:time shift>,<operator>,<pattern>)
定义的评估期内的值数。 参见常用参数.

operator (可选; 必须使用双引号)

支持的operators:
eq - 等于(默认)
ne - 不等于
gt - 大于
ge - 大于或等于
lt - 小于
le - 小于或等于
like - 匹配 if 包含模式(区分大小写)
bitand - 位与
regexp - pattern中给出的正则表达式匹配区分大小写
iregexp - pattern中给出的正则表达式匹配不区分大小写

pattern (可选) - 必需的模式(字符串参数必须用双引号引起来)
支持的值类型: float, integer, string, text, log

浮点项匹配精度为2.22e-16; 如果数据库未升级 ,则精度为0.000001。

使用bitand 作为第三个参数,第四个pattern参数可以指定为两个数字,用'/'分隔: number_to_compare_with/mask. count() 根据值和mask 计算"按位与" 并将结果和 number_to_compare_with进行比较。如果"按位与"的结果等于number_to_compare_with, 则计算该值。
如果number_to_compare_with and mask 相等, 则只有mask 需要指定 (不带 '/').

regexp or iregexp 作为第三个参数, 第四个pattern 参数可以是普通的或or 全局 (以'@'开头)正则表达式。在全局正则表达式的情况下,区分大小写是从全局正则表达式设置继承的。出于正则表达式匹配的目的,浮点值将始终用'.'后的4位十进制数字表示。另请注意,对于大数字,十进制(存储在数据库中)和二进制(由Zabbix server使用) 表示的差异可能会影响第 4 位十进制数字。

示例:
=> count(/host/key,10m) → 到现在为止的最后 10 分钟的值数
=> count(/host/key,10m,"like","error") → 从现在 开始过去10分钟内包含 'error' 的值的数量
=> count(/host/key,10m,,12) → 到现在 为止的最后10分钟的值的数量等于'12'
=> count(/host/key,10m,"gt",12) → 到现在 为止的最后10分钟的值的数量大于 '12'
=> count(/host/key,#10,"gt",12) → 到现在 为止的最后10个值中大于'12'的数量
=> count(/host/key,10m:now-1d,"gt",12) → 从现在起24小时前到24小时前10分钟之间超过'12'的值数量
=> count(/host/key,10m,"bitand","6/7") → 到现在为止最后10分钟的值的数量,在3个最低有效位中具有 '110' (二进制) 。
=> count(/host/key,10m:now-1d) → 从现在起24小时前到24小时前10分钟之间的值数量
countunique (/host/key,(sec|#num)<:time shift>,<operator>,<pattern>)
定义的评估期内唯一值的数量。 参见常用参数.

operator (可选;必须使用双引号)

支持operators:
eq - 等于(默认)
ne - 不等于
gt - 大于
ge - 大于或等于
lt - 小于
le - 小于或等于
like - 匹配 if 包含模式(区分大小写)
bitand - 位与
regexp - pattern中给出的正则表达式匹配区分大小写
iregexp - pattern中给出的正则表达式匹配不区分大小写

pattern (可选) - 必需的模式(字符串参数必须用双引号引起来)
支持的值类型: float, integer, string, text, log

浮点项匹配精度为2.22e-16; 如果数据库未升级 ,则精度为0.000001。

使用bitand 作为第三个参数,第四个pattern参数可以指定为两个数字,用'/'分隔: number_to_compare_with/mask. count() 根据值和mask 计算"按位与" 并将结果和 number_to_compare_with进行比较。如果"按位与"的结果等于number_to_compare_with, 则计算该值。
如果number_to_compare_with and mask 相等, 则只有mask 需要指定 (不带 '/').

regexp or iregexp 作为第三个参数, 第四个pattern 参数可以是普通的或or 全局 (以'@'开头)正则表达式。在全局正则表达式的情况下,区分大小写是从全局正则表达式设置继承的。出于正则表达式匹配的目的,浮点值将始终用'.'后的4位十进制数字表示。另请注意,对于大数字,十进制(存储在数据库中)和二进制(由Zabbix server使用) 表示的差异可能会影响第 4 位十进制数字。

Examples:
=> countunique(/host/key,10m) → 到现在为止的最后 10 分钟的唯一值数
=> countunique(/host/key,10m,"like","error") →从现在 开始过去10分钟内包含 'error' 的唯一值的数量
=> countunique(/host/key,10m,"gt",12) → 到现在 为止的最后10分钟的唯一值的数量大于 '12'
=> countunique(/host/key,#10,"gt",12) → 到现在 为止的最后10个值中唯一值数量大于'12'
=> countunique(/host/key,10m:now-1d,"gt",12) → 从现在起24小时前到24小时前10分钟之间超过'12'的唯一值数量
=> countunique(/host/key,10m,"bitand","6/7") → 到现在为止最后10分钟的唯一值的数量,在3个最低有效位中具有 '110' (二进制) 。
=> countunique(/host/key,10m:now-1d) →从现在起24小时前到24小时前10分钟之间的唯一值数量
find (/host/key,<(sec|#num)<:time shift>>,<operator>,<pattern>)
找到一个值匹配。 参见常用参数.

sec or #num (可选) - 如果未指定,则默认为最新值

operator (可选;必须使用双引号)

支持operators:
eq - 等于(默认)
ne - 不等于
gt - 大于
ge - 大于或等于
lt - 小于
le - 小于或等于
like - 值包含pattern 中给定的字符串(区分大小写)
bitand - 位与
regexp - pattern中给出的正则表达式匹配区分大小写
iregexp - pattern中给出的正则表达式匹配不区分大小写

pattern - (可选) - 必需的模式(字符串参数必须用双引号引起来);Perl兼容正则表达式 (PCRE) 正则表达式,如果operatorregexp, iregexp
支持的值类型:float, int, str, text, log

返回:
1 - 找到
0 - 否则

如果处理了多个值,至少有一个匹配值,则返回'1'。

regexpiregexp 作为第三个参数,第四个pattern参数可以是普通的或全局 的(以'@'为开头) 正则表达式。在全局正则表达式的情况下,区分大小写是从全局正则表达式设置继承的。

示例:
=> find(/host/key,10m,"like","error") → 查找从现在开始10分钟前包含'error' 的值
first (/host/key,sec<:time shift>)
定义的评估期内的第一个(最旧的)值。 参见常用参数. 支持的值类型:float, int, str, text, log

示例:
=> first(/host/key,1h) → 检索从现在开始最近一小时内最旧的值。

请参阅last()。
fuzzytime (/host/key,sec)
检查被动代理时间与Zabbix server/proxy时间的差异。 参见常用参数. 支持的值类型:float, int

返回:
1 - 被动监控项值(作为时间戳)与 Zabbix server/proxy时间戳之间的差异小于或等于 T 秒
0 - 否则

通常与 'system.localtime' 监控项一起使用以检查该本地时间与 Zabbix server的本地时间同步。 注意 'system.localtime'”必须配置为被动检查
也可以与 vfs.file.time[/path/file,modify] key 一起使用来检查文件是否长时间没有得到更新。

示例:
=> fuzzytime(/host/key,60s)=0 → 如果时间差超过 60 秒,则检测问题

不建议将此函数用于复杂的触发器表达式(涉及多个监控项),因为它可能会导致意外结果(将使用最近的度量来测量时间差), 例如在 fuzzytime(/Host/system.localtime,60s)=0 or last(/Host/trap)<>0
last (/host/key,<#num<:time shift>>)
最新值 参见常用参数.

#num (可选) - 第N个最近的值
支持的值类型:float, int, str, text, log

请注意,带哈希标签的时间段(#N)在这里的工作方式与许多其他函数不同。
例如:
last()总是等于last(#1)
last(#3) - 第三个最近的值 (不是 三个最新的值)

如果在1秒内存在两个以上的值,Zabbix不保证值的确切历史顺序。

示例:
=> last(/host/key) → 检索最后一个值
=> last(/host/key,#2) → 检索前一个值
=> last(/host/key,#1) <> last(/host/key,#2) → 最后一个值和前一个值不同

另外参见first()。
logeventid (/host/key,<#num<:time shift>>,<pattern>)
检查最后一个日志条目的事件 ID 是否与正则表达式匹配 参见 常用参数.

#num (可选) - 第N个最近的值

pattern (可选) - 描述所需模式的正则表达式 Perl兼容正则表达式 (PCRE)样式(字符串参数必须用双引号引起来)
支持的值类型:log

返回:
0 - 不匹配
1 - 匹配
logseverity (/host/key,<#num<:time shift>>)
最后一个日志条目的日志严重性。 参见 常用参数.

#num (可选) - 第N个最近的值
支持的值类型: log

返回:
0 - 默认严重性
N - 严重性(整数,对 Windows事件日志有用:1 - 信息, 2 - 警告, 4 - 错误, 7 - 失败审计, 8 - 成功审计, 9 - 严重,10 - 详细).
Zabbix 从Windows 事件日志的 Information 中获取日志的严重性
logsource (/host/key,<#num<:time shift>>,<pattern>)
检查最后一个日志条目的日志源是否匹配正则表达式 参见 常用参数.

#num (可选) - 第N个最近的值

pattern (可选) -描述所需模式的正则表达式 Perl兼容正则表达式 (PCRE)(字符串参数必须用双引号引起来)
支持的值类型: log

返回:
0 - 不匹配
1 - 匹配

通常用于 Windows 事件日志。例如,logsource("VMware Server")
monodec (/host/key,(sec|#num)<:time shift>,<mode>)
检查值是否单调下降 参见常用参数.

mode (必须使用双引号) - weak (每个值都小于或与前一个相同;默认) 或 strict (每个值都减少了)
支持的值类型:int

如果时间段内的所有元素连续减少,则返回1,否则返回0。

示例:
=> 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>)
检查值是否单调增加 参见 常用参数.

mode (必须使用双引号) - weak (每个值都大于或与前一个相同;默认) 或 strict (每个值都增加了)
支持的值类型:int

如果时间段内的所有元素连续增加,则返回1,否则返回0。

示例:
=> monoinc(/Host1/system.localtime,#3,"strict")=0 - 检查系统本地时间是否一直在增加
nodata (/host/key,sec,<mode>)
检查是否没有收到数据 参见 常用参数.

sec 周期不应小于30 秒,因为历史同步器进程仅每30秒计算一次此函数。

nodata(/host/key,0)是不允许的

mode - 如果设置为strict (双引号), 此函数将对代理可用性不敏感(有关详细信息,请参阅注释)
支持所有值类型

返回:
1 - 如果在定义的时间段内没有收到数据
0 - 否则

从Zabbix 5.0, 代理监控的'nodata' 触发器默认情况下对代理可用性敏感 - 如果代理不可用,则 'nodata'触发器将恢复连接后不会立即触发,但会在延迟期间跳过数据。请注意,如果连接恢复超过15秒且不少于2秒和 ProxyUpdateFrequency秒后,则会激活被动代理抑制。如果连接恢复超过15秒,则会激活活动代理抑制。

要关闭对代理可用性的敏感性,请使用第三个参数,例如:nodata(/host/key,5m,"strict");在这种情况下,该函数将与5.0.0之前的功能相同,并在没有数据的评估期(五分钟)过去后立即触发。

请注意,如果在第一个参数的时间段内,此函数将显示错误:
- 没有数据并且Zabbix server已重新启动
- 没有数据并且已完成维护
- 没有数据并且监控项已添加或重新启用
错误是显示在触发器 配置Info 中。

如果Zabbix server, proxy和agent存在时间差异,此功能可能无法正常工作。另外参见: 时间同步要求
percentile (/host/key,(sec|#num)<:time shift>,percentage)
周期的第P个百分位数,其中P(百分比)由第三个参数指定 参见 常用参数.

percentage - 0到100(含)之间的浮点数,小数点后最多4位
支持的值类型:float, int
rate (/host/key,sec<:time shift>)
在定义的时间段内,单调递增的计数器每秒平均增加速率 参见常用参数. 支持的值类型:float, int

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

示例:
=> rate(/host/key,30s) → 如果 30 秒内单调增加为 20,则此函数将返回 0.67。
trendavg (/host/key,time period:time shift)
定义时间段内趋势值的平均值 time period - 时间段(最小'1h'), 定义为<N><time unit> 其中
N - 时间单位数
time unit - h (时), d (天), w (周), M (月) 或 y (年)。

Time shift - 时间段偏移(参见示例)
示例:
=> trendavg(/host/key,1h:now/h) → 前一小时的平均值(例如 12:00-13:00)
=> trendavg(/host/key,1h:now/h-1h) → 两小时前的平均值(11:00-12:00)
=> trendavg(/host/key,1h:now/h-2h) → 三小时前的平均值(10:00-11:00)
=> trendavg(/host/key,1M:now/M-1y) → 一年前上个月的平均值
trendcount (/host/key,time period:time shift)
在定义的时间段内成功检索到的趋势值的数量。 time period - 时间段(最小'1h'), 定义为<N><time unit> 其中
N - 时间单位数
time unit - h (时), d (天), w (周), M (月) 或 y (年)。

Time shift - 时间段偏移(参见示例)
示例:
=> trendcount(/host/key,1h:now/h) → 上一小时的计数(例如 12:00-13:00)
=> trendcount(/host/key,1h:now/h-1h) → 两小时前的计数 (11:00-12:00)
=> trendcount(/host/key,1h:now/h-2h) → 三小时前的计数 (10:00-11:00)
=> trendcount(/host/key,1M:now/M-1y) → 一年前的上个月的计数
trendmax (/host/key,time period:time shift)
定义时间段内趋势值的最大值 time period - - 时间段(最小'1h'), 定义为<N><time unit> 其中
N - 时间单位数
time unit - h (时), d (天), w (周), M (月) 或 y (年)。

Time shift - 时间段偏移(参见示例)
示例:
=> trendmax(/host/key,1h:now/h) → 前一小时的最大值 (例如12:00-13:00)
=> trendmax(/host/key,1h:now/h) - trendmin(/host/key,1h:now/h) → 计算前一小时(12:00-13:00)的最大值和最小值之间的差值(趋势增量)
=> trendmax(/host/key,1h:now/h-1h) → 两小时前的最大值 (11:00-12:00)
=> trendmax(/host/key,1h:now/h-2h) → 三小时前的最大值 (10:00-11 :00)
=> trendmax(/host/key,1M:now/M-1y) → 一年前上个月的最大值
trendmin (/host/key,time period:time shift)
定义时间段内趋势值的最小值 time period -时间段(最小'1h'), 定义为<N><time unit> 其中
N - 时间单位数
time unit - h (时), d (天), w (周), M (月) 或 y (年)。

Time shift - 时间段偏移(参见示例)
示例:
=> trendmin(/host/key,1h:now/h) → 前一小时的最小值(例如 12:00-13:00)
=> trendmin(/host/key,1h:now/h) - trendmin(/host/key,1h:now/h) → 计算前一小时(12:00-13:00)的最大值和最小值之间的差值(趋势增量)
=> trendmin(/host/key,1h:now/h-1h) → 最小两小时前(11:00-12:00)
=> trendmin(/host/key,1h:now/h-2h) → 最小三小时前 (10:00-11 :00)
=> trendmin(/host/key,1M:now/M-1y) → 一年前上个月的最小值
trendstl (/host/key,eval period:time shift,detection period,season,<deviations>,<devalg>,<s_window>)
返回异常率 - 一个介于0和1之间的十进制值,即((检测周期中异常值的数量)/(检测周期中值的总数) eval period - 必须分解的时间段 (最小'1h'), 定义为<N><time unit> 其中
N - 时间单位数
time unit - h (时), d (天), w (周), M (月) 或 y (年)。

Time shift - 时间段偏移(参见示例)

detection period - 从计算异常的评估期结束开始的时间段(最小'1h',不能长于评估期),定义为 <N><time unit> 其中
N - 时间单位数
time unit - h (时), d (天), w (周)。

season - 预计seasonality (重复模式) 的最短时间段(最小'2h', 不能长于评估期,评估期的条目数必须大于结果频率的两倍 (season/h)),定义为<N><time unit> 其中
N - 时间单位数
time unit - h (时), d (天), w (周)。

deviations - 计为异常的偏差数(用 devalg 计算)(可以是小数),(必须大于或等于1,默认为 3)

devalg (必须双引号) -偏差算法,可以是stddevpop, stddevsamp or mad (默认)

s_window 用于seasonal 提取的黄土窗口的跨度(滞后)(默认为10*评估期间的条目数+1)
示例:
=> trendstl(/host/key,100h:now/h,10h,2h) → 分析过去100小时的趋势数据,
找出该周期前10小时的异常率,
预计周期为2h,
如果评估期的剩余序列值达到该剩余序列的MAD的3个偏差值
=> trendstl(/host/key,100h:now/h-10h,100h,2h,2.1,"mad") → 分析前 100 小时趋势数据的周期,从 10 小时前开始计数,
找到整个周期的异常率,
预计周期为 2h,
如果评估期的剩余序列值达到该剩余序列的MAD的2,1偏差值,则将其视为异常值
=> trendstl(/host/key,100d:now/d-1d,10d,1d,4,,10) → 分析从前一天开始的前100天趋势数据,
求该周期最后10天周期的异常率,
期望周期为1天,
评估周期的剩余序列值视为异常如果它们达到该剩余系列的MAD的4个偏差值,
则覆盖 loess 窗口的默认跨度,用于季节性提取“10*eval period 中的条目数 +1”,跨度为10滞后
=> trendstl(/host/key,1M:now/M-1y,1d,2h,,"stddevsamp") → 一年前上个月的最小值
分析从一年前开始的上个月趋势数据,
求预计周期为2小时的该周期的最后一天,
如果评估周期的剩余序列值达到该剩余序列的样本标准偏差的3偏差值,则将其视为异常
trendsum (/host/key,time period:time shift)
定义时间段内的趋势值总和 time period -时间段(最小'1h'), 定义为<N><time unit> 其中
N - 时间单位数
time unit - h (时), d (天), w (周), M (月) 或 y (年)。

Time shift - 时间段偏移(参见示例)
示例:
=> trendsum(/host/key,1h:now/h) → 前一小时的总和 (例如 12:00-13:00)
=> trendsum(/host/key,1h:now/h-1h) → 两小时前 (11:00-12:00) 的总和
=> trendsum(/host/key,1h:now/h-2h) → 三小时前 (10:00-11:00) 的总和
=> trendsum(/host/key,1M:now/M-1y) → 一年前上个月的总和