7 触发器预测函数

概述

有时会有即将发生问题的迹象。可以通过这些迹象,提前采取措施防止或减轻问题的影响。

Zabbix拥有基于监控系统的历史数据来预测未来行为的工具。这些工具通过触发器预测函数来实现。

函数

在设置触发器之前,需要定义问题状态是什么,以及需要多少时间来采取行动。然后有两种方式来设置触发器,以信号通知潜在的不希望发生的情况。第一种:触发器必须在系统预计处于问题状态后“行动时间”内触发。第二种:触发器必须在系统将在少于“行动时间”内达到问题状态时触发。相应的触发器函数为forecasttimeleft。请注意,这两个函数的基础统计分析基本上是相同的。你可以根据喜好设置触发器,结果相似。

在设置触发器之前,必须定义问题状态是什么,以及需要多少时间来采取行动。然后有两种方式来设置触发器,以信号通知潜在的不希望发生的情况。首先:触发器必须在系统预计处于问题状态后“行动时间”内触发。其次:触发器必须在系统将在少于“行动时间”内达到问题状态时触发。相应的触发器函数为forecasttimeleft。请注意,这两种函数的基础统计分析基本上是相同的。你可以根据喜好设置触发器,结果相似。

在设置触发器之前,需要定义问题状态是什么,以及需要多少时间来采取行动。然后有两种方式来设置触发器,以信号通知潜在的不希望发生的情况。第一种:触发器必须在系统预计处于问题状态后“行动时间”内触发。第二种:触发器必须在系统将在少于“行动时间”内达到问题状态时触发。对应的触发器函数为forecasttimeleft。请注意,这两个函数的基础统计分析基本上是相同的。你可以根据喜好设置触发器,结果相似。

在设置触发器之前,必须定义问题状态是什么,以及需要多少时间来采取行动。然后有两种方式来设置触发器,以信号通知潜在的不希望发生的情况。首先:触发器必须在系统预计处于问题状态后“行动时间”内触发。其次:触发器必须在系统将在少于“行动时间”内达到问题状态时触发。相应的触发器函数为forecasttimeleft。请注意,这两种函数的基础统计分析基本上是相同的。你可以根据喜好设置触发器,结果相似。

在设置触发器之前,需要定义问题状态是什么,以及需要多少时间来采取行动。然后有两种方式来设置触发器,以信号通知潜在的不希望发生的情况。第一种:触发器必须在系统预计处于问题状态后“行动时间”内触发。第二种:触发器必须在系统将在少于“行动时间”内达到问题状态时触发。对应的触发器函数为forecasttimeleft。请注意,这两个函数的基础统计分析基本上是相同的。你可以根据喜好设置触发器,结果相似。

在设置触发器之前,必须定义问题状态是什么,以及需要多少时间来采取行动。然后有两种方式来设置触发器,以信号通知潜在的不希望发生的情况。首先:触发器必须在系统预计处于问题状态后“行动时间”内触发。其次:触发器必须在系统将在少于“行动时间”内达到问题状态时触发。相应的触发器函数为forecasttimeleft。请注意,这两种函数的基础统计分析基本上是相同的。你可以根据喜好设置触发器,结果相似。

在设置触发器之前,需要定义问题状态是什么,以及需要多少时间来采取行动。然后有两种方式来设置触发器,以信号通知潜在的不希望发生的情况。第一种:触发器必须在系统预计处于问题状态后“行动时间”内触发。第二种:触发器必须在系统将在少于“行动时间”内达到问题状态时触发。对应的触发器函数为forecasttimeleft。请注意,这两个函数的基础统计分析基本上是相同的。你可以根据喜好设置触发器,结果相似。

在设置触发器之前,必须定义问题状态是什么,以及需要多少时间来采取行动。然后有两种方式来设置触发器,以信号通知潜在的不希望发生的情况。首先:触发器必须在系统预计处于问题状态后“行动时间”内触发。其次:触发器必须在系统将在少于“行动时间”内达到问题状态时触发。相应的触发器函数为forecasttimeleft。请注意,这两种函数的基础统计分析基本上是相同的。你可以根据喜好设置触发器,结果相似。

在设置触发器之前,需要定义问题状态是什么,以及需要多少时间来采取行动。然后有两种方式来设置触发器,以信号通知潜在的不希望发生的情况。第一种:触发器必须在系统预计处于问题状态后“行动时间”内触发。第二种:触发器必须在系统将在少于“行动时间”内达到问题状态时触发。对应的触发器函数为forecasttimeleft。请注意,这两个函数的基础统计分析基本上是相同的。你可以根据喜好设置触发器,结果相似。

在设置触发器之前,必须定义问题状态是什么,以及需要多少时间来采取行动。然后有两种方式来设置触发器,以信号通知潜在的不希望发生的情况。首先:触发器必须在系统预计处于问题状态后“行动时间”内触发。其次:触发器必须在系统将在少于“行动时间”内达到问题状态时触发。相应的触发器函数为forecasttimeleft。请注意,这两种函数的基础统计分析基本上是相同的。你可以根据喜好设置触发器,结果相似。

参数

这两个函数几乎使用相同的参数集。请参考支持的函数列表。

    ##### 时间间隔

首先,您需要指定Zabbix应分析的历史时期,以进行预测。您通过时间周期参数以熟悉的方式执行此操作,并可选择像使用avgcountdeltamaxminsum函数时那样添加时间偏移。

预测范围

(forecast 仅适用)
参数 time 指定Zabbix应基于历史数据中发现的依赖关系,对未来进行预测的时长。无论您是否使用 time_shifttime 总是从当前时刻开始计算。

    ##### 达到的阈值

(timeleft 仅适用)
参数 threshold 指定分析项必须达到的值, 无论从上方还是从下方达到均无差异。一旦我们确定了 f(t) (见下文),我们应该解方程 f(t) = threshold 并返回 更接近当前时间且位于当前时间右侧的根,或者如果不存在这样的根, 则返回 1.7976931348623158E+308。

当项目值接近阈值然后越过它时,timeleft 假定交点已经位于过去, 因此切换到下一个与 threshold 水平的交点,如果存在的话。 最佳实践应该是将预测作为常规问题诊断的补充,而不是替代。 1

    ##### 拟合函数

默认的fit线性函数。但如果您的监控系统更为复杂,您还有更多选项可供选择。

fit x = f(t)
线性 x = a + b*t
多项式N2 x = a0 + a1*t + a2*t2 + ... + an*tn
指数 x = a*exp(b*t)
对数 x = a + b*log(t)
x = a*tb
    ##### 模式

forecast 仅适用)
每次触发器函数进行评估时,它会从指定的历史周期获取数据,并将指定的函数拟合到数据上。因此,如果数据略有不同,拟合的函数也会略有不同。如果我们仅仅计算未来指定时间点上拟合函数的值,你将无法了解被分析的监控项在当前时刻到未来那一刻之间的预期行为。对于某些fit选项(如 polynomial),未来的简单值可能会产生误导。

mode forecast 结果
value f(当前时间 + time)
max max当前时间 <= t <= 当前时间 + time f(t)
min min当前时间 <= t <= 当前时间 + time f(t)
delta max - min
avg 根据 定义,f(t)(当前时间 <= t <= 当前时间 + time)的平均值

详细信息

为了避免处理极大的数字,我们将指定周期内第一个值的时间戳加上1纳秒作为新的零点时间(当前纪元时间的数量级为109,纪元时间的平方为1018,双精度约为10^-16)。加上1纳秒是为了在计算logarithmicpower拟合时,确保所有时间值为正,因为这些拟合涉及计算log(t)。时间偏移不会影响linearpolynomialexponential拟合(除了使计算更简便和更精确外),但会改变logarithmicpower函数的形状。

可能的错误

函数在以下情况下返回 -1:

  • 指定的评估周期内没有数据;
  • 数学运算的结果未定义3
  • 数值复杂性(不幸的是,对于某些输入数据集,双精度浮点格式的范围和精度变得不足)4

如果选择的拟合效果不佳,描述提供的数据或数据太少,无法进行准确预测,不会标记警告或错误。

示例和错误处理

要在主机上的自由磁盘空间即将耗尽时收到警告,您可以使用如下触发器表达式:

timeleft(/host/vfs.fs.size[/,free],1h,0)}<1h

然而,错误代码 -1 可能会发挥作用,将您的触发器置于问题状态。通常这是好的,因为您会收到警告,提示您的预测工作不正常,您应该更仔细地检查它们,找出原因。但有时这是不好的,因为 -1 可能仅仅意味着在过去的一小时内没有获取到关于主机自由磁盘空间的数据。如果您收到太多误报警报,请考虑使用更复杂的触发器表达式 5

timeleft(/host/vfs.fs.size[/,free],1h,0)<1h and timeleft(/host/vfs.fs.size[/,free],1h,0)<>-1

对于 forecast 的情况稍微复杂一些。首先,-1 可能会使触发器进入问题状态,这取决于您的表达式是否像 forecast(/host/item,(...))<... 或者像 forecast(/host/item,(...))>...

此外,如果项目值为负数是正常情况,-1 可能是一个有效的预测。但在现实世界中这种情况的概率微乎其微(参见 如何 操作符 = 的工作方式)。如果您想或不想将 -1 视为问题,请分别添加 ... or forecast(/host/item,(...))=-1 或者 ... and forecast(/host/item,(...))<>-1

脚注

1 例如,一个简单的触发器如 timeleft(/host/item,1h,X) < 1h 可能在项目值接近 X 时突然进入问题状态,然后一旦达到 X 值时突然恢复。如果问题在于项目值低于 X,请使用: last(/host/item) < X or timeleft(/host/item,1h,X) < 1h 如果问题在于项目值高于 X,请使用: last(/host/item) > X or timeleft(/host/item,1h,X) < 1h

2 多项式阶数可以从 1 到 6,polynomial1 等同于 linear。然而,使用更高阶多项式 需谨慎。如果评估周期包含的点少于确定多项式系数所需的点数,多项式阶数将被降低(例如,请求 polynomial5,但只有 4 个点,因此将拟合 polynomial3)。

3 例如,拟合 exponentialpower 函数涉及计算 item 值的 log()。如果数据包含零或负数,您会收到错误,因为 log() 只对正数值定义。

4 对于 linearexponentiallogarithmicpower 拟合,所有必要的计算都可以明确写出。对于 polynomial,只有 value 可以在没有任何额外步骤的情况下计算。计算 avg 涉及计算多项式不定积分(解析)。计算 maxmindelta 涉及计算多项式导数(解析)并找到其根(数值)。求解 f(t) = 0 涉及找到多项式的根(数值)。

5 但在此情况下,-1 可能会导致您的触发器从问题状态中恢复。为了完全保护,请使用: timeleft(/host/vfs.fs.size[/,free],1h,0)<1h and ({TRIGGER.VALUE}=0 and timeleft(/host/vfs.fs.size[/,free],1h,0)<>-1 or {TRIGGER.VALUE}=1)