2022 Zabbix中国峰会
2022 Zabbix中国峰会

8 预测触发功能

概述

有时候有即将到来的问题的迹象。可以发现这些迹象,以便提前采取行动,以防止或至少最小化问题的影响。

Zabbix具有基于历史数据预测受监视系统的未来行为的工具。这些工具通过预测触发功能实现。

1 功能

需要知道的两件事是如何定义问题状态以及需要多少时间来采取行动。有两种方法可以设置一个关于潜在的不必要的情况的触发信号。第一:触发器必须在系统发生“时间作用”之后才会发生故障状态。第二:当系统在不到“时间行为”的时候达到问题状态时,触发器必须触发。 使用相应的触发器功能是forecast和** timeleft **。请注意,两个功能的基本统计分析基本相同。 您可以设置触发器,以您喜欢的方式,以类似的结果。

2 参数

这两个功能使用几乎相同的参数集。列表请参见 支持的功能

2.1 时间间隔

首先你应该指明Zabbix在预测的时候应该分析的历史时间段。你可以通过“秒”或“#num”参数和可选的''time_shift'以熟悉的方式进行操作,就像使用** avg count delta max min sum **功能。

2.2预测范围

(forecast only)\\参数time指定了将来Zabbix应该在多大程度上推断其在历史数据中找到的依赖关系。 无论是否使用“time_shift”,“时间”始终从当前时刻算起

2.3 阈值

(timeleft only)\\参数“阈值”指定分析项目必须达到的值,如果从上方或从下方没有差异。 一旦我们确定了f(t)(见下文),我们应该求解方程f(t)=threshold,如果没有这样的根,返回更接近现在和从右到右的根或999999999999.9999。

当项目值接近门槛然后交叉时, ** timeleft **假设交叉点已经过去,因此切换到具有“阈值”级别的下一个交叉值,如果有的话. 最佳实践应该是使用预测作为普通问题诊断的补充,而不是替代。((例如,一个简单的触发器 {host:item.timeleft(1h,,X)} < 1h 当项目值接近X时可能进入问题状态,然后一旦达到值X就突然恢复。如果问题是项目值低于X,请使用:{host:item.last()} < X or {host:item.timeleft(1h,,X)} < 1h如果问题是项目值高于X,请使用: {host:item.last()} > X or {host:item.timeleft(1h,,X)} < 1h))

2.4 适合功能

默认的 fit线性 功能。 但是如果您的监控系统更复杂,您可以选择更多的选择。

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

(forecast only)
每次触发功能被评估时,它都会从指定的历史时段获得数据,并将其指定给数据。因此,如果数据略有不同,拟合函数将略有不同。如果我们在将来在指定时间内简单地计算拟合函数的值,那么您将不会在现在和将来的那个时刻之间预测分析项目的行为。 对于某些“fit”选项(如多项式),未来的简单值可能会产生误导。

模式 * 预测** 结果
value f(now + time)
max maxnow <= t <= now + time f(t)
min minnow <= t <= now + time f(t)
delta max - min
avg average of f(t) (now <= t <= now + time) according to definition

3 细节

为了避免大量的计算,我们将指定时间段内的第一个值的时间戳值加上1 ns作为新的零时间(当前时期为10阶, 时间平方为10 <sup> 18 </ sup>,双精度为约10 <sup> -16 </ sup>)。 添加1 ns以提供对数功率拟合的所有正时间值,其涉及计算log(t)。时间偏移不影响线性多项式指数(除了更容易和更精确的计算),但改变对数功能函数的形状。

4 潜在错误

在这种情况下,函数返回-1:

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

<note tip>如果选择合适不好描述提供的数据或只有太少的数据用于准确预测,就不会有警告或错误被标记。 :::

5 示例和处理错误

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

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

但是,错误代码-1可能会发挥作用,并将您的触发器置于问题状态。一般来说,这是很好的,因为你发现一个警告,你的预测不能正常工作,你应该更彻底地看看他们,以找出原因。 但有时它是坏的,因为-1可以简单地意味着没有关于最后一小时内获得的主机可用磁盘空间的数据。但是,如果您收到太多正值警报,则应考虑使用更复杂的触发器表达式4:

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

forecast的情况可能会更加负责.首先,-1可能会也可能不会将触发器置于问题状态,具体取决于您是否具有表达式: {host:item.forecast(...)}<... 或者 {host:item.forecast(...)}>...

此外,如果项目值为负值,-1可能是有效的预测。 但这种情况实际发生的可能性很小,(参见运算符= 如何 运作).添加... or {host:item.forecast(...)}=-1 or ... and {host:item.forecast(...)}<>-1 if you want or don't want to treat -1 as a problem respectively.

参见

  1. Predictive trigger functions (pdf) on zabbix.org

  1. Polynomial degree can be from 1 to 6, polynomial1 is equivalent to linear. However, use higher degree polynomials with caution. If the evaluation period contains less points than needed to determine polynomial coefficients, polynomial degree will be lowered (e.g polynomial5 is requested, but there are only 4 points, therefore polynomial3 will be fitted).↩︎

  2. 比如将指数 or 功率 函数计入log()item值.如果数据包含零或负数,您将收到错误 因为log() 仅限于正值。↩︎

  3. For linear, exponential, logarithmic and power fits all necessary calculations can be written explicitly. For polynomial only value can be calculated without any additional steps. Calculating avg involves computing polynomial antiderivative (analytically). Computing max, min and delta involves computing polynomial derivative (analytically) and finding its roots (numerically). Solving f(t) = 0 involves finding polynomial roots (numerically).↩︎

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