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

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

示例与错误处理

当您即将run磁盘空间不足时get警告 您的 主机,可以使用如下触发器表达式:

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

然而,错误代码-1可能会起作用并将您的触发器置于 问题状态。通常这是好事,因为您get了一个警告提示 预测功能运行不正常,您需要更仔细地检查它们 彻底排查原因。但有时这很糟糕,因为-1可能仅仅 意味着未获取到关于主机磁盘剩余空间的数据 过去一小时。如果您收到过多的误报警报, 建议使用更复杂的触发器表达式 5

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

last(/host/item) > X or timeleft(/host/item,1h,X) < 1h

2 多项式次数范围可从 1 至 6,polynomial1 表示等效关系 to linear. However, use higher degree polynomials with caution. If the 评估周期包含的点数少于确定所需的点数 多项式系数,多项式次数将降低(例如, polynomial5 被请求,但仅有 4 个数据点,因此 polynomial3 will be fitted).

3 例如,拟合指数函数时涉及 计算 监控项值 的对数 log()。如果数据包含零或负值 在数值处理时,若对非正数调用get函数将报错,因为log()函数仅定义在正数域 values only.

4。对于线性指数对数拟合,所有 必要的计算可以显式地编写。对于多项式 只有可以在无需任何额外步骤的情况下进行计算。 计算avg涉及多项式不定积分的求解 (分析性)。计算最大值最小值差值涉及 计算多项式导数(解析法)并求其根 (数值上)。求解f(t) = 0涉及寻找多项式根 (numerically).

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)