7 种预测性触发器函数

概述

有时会出现问题即将发生的迹象。这些迹象可以被发现,从而可以提前采取措施,防止问题的发生或至少减轻其影响。

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

函数

在设置触发器之前,有必要明确定义问题状态是什么以及需要多少时间采取行动。然后有两种方式来设置触发器以提示潜在的不良情况。第一种方式:当系统在“响应时间”后预计处于问题状态时触发器必须触发。第二种方式:当系统在少于“响应时间”的时间内即将达到问题状态时触发器必须触发。相应的触发器函数为 forecasttimeleft。请注意,这两个函数的底层统计分析基本上是相同的。您可以根据偏好选择任意一种方式设置触发器,其结果是相似的。

参数

这两个函数使用几乎相同的参数集。请参考supported functions中的参数列表。

时间间隔

首先,您需要指定Zabbix进行分析以得出预测结果的历史时间段。您可以通过熟悉的方式,使用time period参数以及可选的时间偏移量来实现这一点,这与您在使用avgcountdeltamaxminsum函数时的操作方式相同。

预测范围

预测模式)
参数 time 指定 Zabbix 应该基于历史数据中发现的依赖关系向前推算多远。无论是否使用 time_shifttime 的计时始终从当前时刻开始。

达到阈值

(仅限timeleft
参数 threshold 指定了被分析的 监控项 必须达到的值,无论该值是从上方还是下方接近。一旦我们确定了 f(t)(见下文),我们就应该解方程 f(t) = threshold,并返回距离当前时间较近且位于当前时间右侧的根;如果没有这样的根,则返回 1.7976931348623158E+308。

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

拟合函数

默认的 fit线性 函数。但如果您的监控系统更加复杂,则您可以从更多选项中进行选择。

fit x = f(t)
linear x = a + b*t
polynomialN2 x = a0 + a1*t + a2*t2 + ... + an*tn
exponential x = a*exp(b*t)
logarithmic x = a + b*log(t)
power x = a*tb
模式

(仅限预测
每次评估触发器函数时,它都会从指定的历史时间段获取数据,并将指定的函数拟合到这些数据上。因此,如果数据略有不同,拟合出的函数也会略有不同。如果我们只是简单地计算未来某个指定时间点上拟合函数的值,那么我们将无法了解分析的 监控项 在当前到未来该时间点之间可能的行为表现。对于某些 fit 选项(例如 polynomial),来自未来的简单值可能会产生误导。

mode forecast 结果
value f(now + time)
max maxnow <= t <= now + time f(t)
min minnow <= t <= now + time f(t)
delta max - min
avg f(t) 的平均值(now <= t <= now + time),依据 definition

详情

为了避免使用极大数值进行计算,我们将指定时间段内第一个值的时间戳加上 1 ns 作为一个新的零时间点(当前纪元时间约为 109,纪元平方为 1018,双精度约为 10-16)。添加 1 ns 是为了确保对 logarithmic(对数)和 power(幂函数)拟合使用的所有时间值均为正数,因为这些拟合涉及计算 log(t)。时间偏移不会影响 linear(线性)、polynomial(多项式)和 exponential(指数)拟合(除了使计算更简单和更精确),但会改变 logarithmic(对数)和 power(幂函数)拟合的函数形状。

潜在错误

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

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

如果所选模型与提供的数据拟合效果较差,或者数据量过少导致无法准确预测,系统不会标记任何警告或错误。

示例与错误处理

当您即将耗尽磁盘空间时,get 会发出警告,当您即将 run 磁盘空间时也是如此。 您的 主机,您可以使用类似如下的触发器表达式:

剩余时间(/主机/vfs.fs.size[/,free],1h,0)}<1h

但是,错误代码-1可能会起作用并使您的触发器处于 问题状态。通常这是一个好的做法,因为它会 get 一个警告,提示您的 预测功能无法正常工作,您应更加关注它们 彻底查明原因。但有时情况很糟糕,因为-1 可能只是 意味着在主机可用磁盘空间方面没有获取到数据 最近一小时。如果您收到过多的误报警报, 建议使用更复杂的触发器表达式 5:

timeleft(/主机/vfs.fs.size[/,free],1h,0)<1h 并且 timeleft(/主机/vfs.fs.size[/,free],1h,0)<>-1

预测的情况则要困难一些。首先, -1 可能会也可能不会根据具体情况将触发器置于问题状态 无论你是否有类似 forecast(/host/item,(...))<... 的表达式 像 forecast(/host/item,(...))>...

此外,如果-1是监控项的正常情况,那么它可能是一个有效的预测。 值为负数。但在现实中这种情况发生的概率很小。 世界局势可以忽略不计(参见 how 运算符 = 生效)。因此 添加 ... or forecast(/host/item,(...))=-1... and forecast(/host/item,(...))<>-1 如果需要或不需要 分别将 -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 是等效的 转换为线性。但是,请将更高阶的多项式 与 警告。如果 评估周期包含的点数不足以确定状态 多项式系数,多项式阶数将被降低(例如, polynomial5 被请求,但只有 4 个点,因此 polynomial3 将被拟合)。

3 例如,拟合指数函数涉及 计算 监控项值 的 log()。如果数据包含零或负数 数字时,将会出现get错误,因为log()仅对正数定义。 仅返回OutputFormat格式要求结果

4 对于线性指数对数拟合 必要的计算可以显式编写。对于多项式 只有 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)