作者:
Dmitry Lambert
Zabbix培训师
监控不一定是指过去和现在。利用Zabbix的趋势预测功能,即可分析已收集的数据,并预测未来值。这样,就有可能在问题发生之前得到通知。
简介
今天的话题是:Zabbix内部的趋势预测
我安装的版本是Zabbix 4.0.2,且已启动并运行了虚拟机。我们在完成这个任务时无需使用SSH或Linux CLI,因此也不需要任何有关Linux的知识。我们将要配置的所有内容都会在Zabbix前端完成。
关于Zabbix趋势预测
那么,什么是趋势预测?
一般而言,当我们谈论监控时,我们指的是监控软件内部的实时数据。我们从主机和数据源中提取数据,并动态评估该数据。如果该数据达到了我们指定的触发阈值,我们就会收到通知。因此基本上,我们会在问题发生后,或至少在问题发生的前一刻作出反应。
但有了趋势预测,我们便能作出前瞻性反应。我们不会在事情发生后才收到通知,而是在触发指定阈值之前,被告知还有一周的时间,或被告知一周后的预测值是什么。你可以决定是否要在问题发生之前立即采取行动,或者再等几天。
下面,让我们首先思考一下我们究竟可以预测什么。Zabbix内部的函数可以预测一个值,并预测我们在达到指定值之前的剩余时间。
但这就意味着我们可以预测一切吗?答案当然是否定的。
你可以通过配置使Zabbix预测明天的股票价格、天气或温度,但在99%的情况下,预测并不准确。
利用我们所拥有的东西还不足以预测未来值。我们可以预测一周或一个月后的CPU负载吗?我们可以试着配置,但并不会得到精确的测度,因为CPU负载实际上并不属于可预测的测度。它取决于系统中可能会发生的许多事情。
有关预测的一个例子:磁盘空间。
对系统中的磁盘空间进行监控是非常普遍的,而且还能指定触发器,比如在磁盘空间降到2%以下的时候,该触发器将向你发送通知。
但糟糕的是,你收到的信息是——主机1中的C盘空间已低于2%。问题已经发生,但你没有时间思考或搜集信息而且需要尽快对其进行修复。
但是,你可以配置趋势预测。这样一来,你再也不会收到“你好,磁盘空间现已低于2%”的通知,而是被告知:“你好,根据Zabbix的预测,主机的磁盘空间将在一周后降至2%以下”。
那么你将有七天的时间来解决这一问题,你完全可以在其发生之前登录系统,清理临时文件,增加磁盘空间,最终解决问题。
触发器函数
那么我们怎样才能做到呢?仅需两个触发器函数即可——timeleft与forecast。
注:可查阅Zabbix文档中的触发器函数页。
Timeleft函数
该函数将预测并告知你在达到指定值之前还有多少时间。
此例将在剩余时间低于一个小时的时候提出问题,直到文件系统达到200兆字节的阈值。此外,它还将考虑一天的历史数据。
这些参数均可更改。触发器的常见句法如下所示:
其中,参数sec和#num分别代表时间周期和值的数量。我们可以将一天的历史数据更改为七天的历史数据,如例所示。
第二个参数是time_shift,可在时间上使评估点后移。参数time_shift是指,我们可以提前,比如说提前一天获取一样的七天历史数据。基本上,我们会忽略今天的数据。这是一个可选参数(非强制性参数被放在括号内)。
参数fit旨在分析数据、作出预测。也属于可选参数。默认值为‘linear’,这取决于配置预测所依据的数据行为。如果您不知道为什么要在linear、polynomial,、exponential、power和其他值之间作出选择,那就不管它,使其保持默认状态即可。
Forecast函数
该触发器函数具有相同的参数,即(sec/#num, time_shift, time, fit and mode)。同样,我们可以忽略其中的大部分内容。句法如下所示:
在此例中,我们将利用7天的历史数据,并提前7天进行预测。因此,如果Zabbix预测你的磁盘空间将在一周后降至100兆字节以下,那么触发器将触发。
同样地,你也可以更改这些参数。假设我将利用14天的历史数据来预测明天可能发生的事情。触发器表达式的相关部分如下所示:
数据评估期
让我们来想想您在更改数据评估期时都发生了什么。评估期越长,技术预测就越准确。但同时,其对快速变化的反应就会越慢。
假设,我们要对14天进行评估。在13天内,CPU负载一直保持在0.5到0.8之间。但在最后一天,CPU负载为5-8。预测结果将比7天低很多,其中,6天内的CPU负载为0.5-0.8,但在最后一天是5-8。
最好采用较长的时间周期,但要注意的是——长周期的反应速度比短周期的慢。
预测可视化
如果您想查看图表,可利用计算项使Zabbix预测实现可视化。
我已在前端拥有Zabbix服务器主机,我将以此来展示如何实现预测的可视化。此外,我将使用system.cpu.load项,因为其测度变化比较快。
处理器负载
CPU负载项目图
我需要在Zabbix服务器主机中创建一个新项,因此我将进行以下程序:Configuration(配置) > Hosts(主机) > Items(项目) > Create Item(创建项目)。
项目参数:Name(姓名)——‘Forecast’(预测),Type(类型)——‘Calculated’(计算)(强制性的),Key(密钥)——只要遵循密钥句法即可,Type of information(信息类型)——‘Numeric (float)’(数值型(浮点型)),以及Update interval(更新间隔)——5 seconds(5秒)(把更新间隔设置得短一些)。
你需要在公式中输入:
表达式必须具有我们要预测的项目键。对我们来说,即system.cpu.load[percpu,avg1]。此外,我们还指定了30分钟的历史值,并预测30分钟后的值。
配置项
之后单击Add。
此时,我们通过最新数据查看对forecast项的预测。正如你所看到的,根据Zabbix的预测,30分钟后的CPU负载为0.23
显然,CPU负载不能是负值。为什么会这样呢?因为,首先,我们使用的评估时间非常短——仅有30分钟。其次,但也是最重要的,CPU负载实际上是不可预测的。
我们可以从图中看出来。
Forecast图
此处的重点是,这是30分钟后的预测,但现在就已显示出来了。我们并不认为图中所示为未来趋势,相反,其显示的是当前时刻。这是Zabbix趋势预测目前面临的局限性,即在默认情况下不可能看到未来值。
如果您想看,那您可以创建一个新的计算项。我们称之为‘Last value’(最后值)。我们将使用之前创建的公式:
Key(密钥)为‘last’(最后),Type of information(信息类型)为‘Numeric (float)’(数值型(浮点型)),Update interval(更新间隔)为30秒。第一个值将在30分钟后出现。单击Add(添加)。
配置项
如果我想立即查看项目,我将收到“无法评估函数”的通知。
显然,由于公式中的指定值,该项目不受支持。但是,如果我在30分钟后查看,该项目将显示实际预测。
根据这些说明来实现这三个项目的可视化——Forecast、Last item和system.cpu.load——因此你可以比较一下Zabbix的预测有多精准。
结论
自Zabbix 3.0开始就可实现趋势预测,但我不敢说它很受欢迎。因为很多Zabbix用户根本就不使用趋势预测。他们也许并不知道如何使用趋势预测,或者他们没有看到趋势预测的优点,但趋势预测确实是存在的。
因此,去学学吧。读取文档,配置测试项,让其运行一天或一周后,看看他们是如何工作的。
加入Zabbix中国峰会
学习前沿的监控技术
聆听多元的行业案例
解决使用疑点难点