或许读者还记得,我们在介绍如何创建一个监控项目时,我们介绍过在“配置项目”表单页面上有两个表单项“保留历史数据(天)”和“保留趋势数据(天)”,并且当时我们给出提示,建议为减轻数据库的压力,在配置监控项目时,应尽可能的在“保留历史数据(天)”表单项里输入较小数据。比如说将这个表单项的输入值调整成7天或半个月。那么,在Zabbix系统中为何有“历史数据”和“趋势数据”两种数据呢?它们又都什么类型的数据呢?以及这两种数据有什么联系和区别吗?下面,我们就针这些问题谈谈Zabbix系统中的“历史数据”和“趋势数据”。
历史数据和趋势数据是Zabbix系统中存储所采集的监控项目数据的两种存储方式。它们既有区别又有联系。所谓历史数据就是指,Zabbix系统针对每个监控项目在每次采集时所收集到的数据,这个数据保存Zabbix系统数据库的历史表中。因为是每次所采集到的数据都保存在历史表中,所以如果监控项目的更新间隔越小,则在固定时间内所保存到历史表中的数据就越多。如果每个监控项目的更新间隔是30秒的话,则两个小时,该监控项目在Zabbix数据库的历史表中就会产生240条记录,一天就会产生2880条记录。或许你会认为,对于MySQL数据库来说,2880条记录几乎可以忽略不计。是的,如果我们的Zabbix系统只监控一台被监控主机,且这台被监控主机只有一个被监控项目,那么每天产生2880条记录确实不值得一提的。但是,当我们监控系统所监控的项目比较多时,则这个数据量还是非常大的。比如说,如果我们监控系统监控1000个监控项目,且每个监控项目的更新间隔都是30秒,则每天历史表中就会产生2880*1000=2880000条记录,也即近300万条记录。而1000个监控项目可以监控多少主机呢?我们以48口的交换机为例,单监控每台交换机的每个端口的流量,则一台48口的交换机就有96个监控项目。所以,如果我们仅监控这样的48口的交换机,1000个监控项目只差不多只够监控10台这样交换机。由此可见,如果我们所监控主机的数量稍等多一点,或者更确切的来说,我们所监控的项目稍微多点,则Zabbix系统每天在其数据库中所产生的记录是非常大的。因此,我们建议,如非必须的,我们在配置监控项目时,应尽量减小历史数据的保留天数,以免给数据库系统带来很大的压力。
而趋势数据则不同,对于相同的更新间隔,系统所产生的趋势数据的数量远远没有历史数据那么庞大。对同一个监控项目,之所以趋势数据的数据量要远远小于历史数据的数据量,是由趋势数据的取值方式决定的。趋势数据取值方式是,它取对应监控项目的历史数据在一个小时内的平均值、最大值、最小值以及这一个小时内该监控项目所采集到的数据的个数。因此,不管一个监控项目的更新间隔是多少,它所对应的趋势数据在数据库中的记录都只有一条。更新间隔越小,仅可能导致数据个数增大,而不会影响该监控项目在趋势表里的记录条数的。由此,或许你觉得趋势数据很不准确,你还是愿意保留更长时间的历史数据,以便查看较长时间的数据图。其实不是这样的,因为在Zabbix系统数据库的趋势表里不但保留一个小时内历史数据的最大值、最小值和平均值,而还保存这一个小时内所采集到的数据个数。因此,在要求并不是很高的场合,使用趋势数据绘出的监控项目的数据图的走势与用历史数据绘出的数据图的走势差别不会很大的。
不是历史数据还是趋势数据,都会周期性被Zabbix服务器端一种称之为“主妇(housekeeper)”进程进行清理,它会周期性的删除过期的历史数据和趋势数据。也正是因为这个进程的存在,才会使Zabbix系统数据的数据量不会一直的彭胀下去。而实际上,如果我们在保持Zabbix系统的被监控主机和被监控项目不变,且不更改监控项目的更新间隔的情况下,Zabbix系统的数据库的数据量会在增长到一定的数据量后不会再增长,而是基本维护在这个数据量上不变。“主妇”进程清理历史数据和趋势数据的频率可以在Zabbix服务器端组件(或服务器代理组件)的配置文件zabbix_server.conf中进行配置,它的配置项是HousekeepingFrequency。
注意1、如果监控项目的“保留历史数据(天)”配置项被设置成0时,则数据库历史表中仅保留该监控项目所采集的最后一条数据,其它历史数据将数据将不会被会保留。而且,引用该监控项目的触发器也只能使用该项目所采集的最后数据。因此,此时如果在触发器里引用该项目时使用max、avg、min等函数据时将没有意义。2、如果监控项目的“保留趋势数据(天)”配置项被设置成0时,则该项目在系统数据库的趋势表里将不保留任何数据。