前几天我们的 Cacti 不出图 4 小时了,然后吊了下值班同事顺便重启下设备就好了。正当我以为没事的时候,过了几天就收到值班的同事反馈说 Cacti 的时间范围调了 最后 2 小时 还有 最后 12 小时,下面的预览图形都还是最后24小时的状态。我测试下也是这样,当初看了看配置和 rrdtool 都看不出问题,也强制修改了图形的时间戳还是这样子。我还以为一次重启就搞出这问题,却使劲分析不了什么问题。
问题重现
如图所示,选择最后 2 小时,下面的图形都会成这个样子。
去谷歌下 "Cacti graph time range wrong" 等问题,也看不到什么关键的回答,就今天我换了个思路找问题。
解决办法
我们的预览图形的文件 URL 是(无关的参数已经删了)
/graph_image.php?graph_start=1600338809&graph_end=1600346009
其中决定时间的参数是 graph_start
和 graph_end
,数值就是标准的 unix 时间戳,无论我怎么调后面的数值都不会有变化。于是我更改了查问题的方式,直接搜 graph_image.php graph_end
搜索结果的一份 Github issue 就有这个问题的反馈,查看原因1是这个 PHP 在图形时间做了限制,图形的起止的时间戳不能超过 1600000000(2020/9/13 20:26:40),也就是说 9 月 13 日所有 Cacti 的系统都会出现这问题,修改也很简单,将限制的时间戳改大就行了。
大约在 graph_image.php
的 53 行(CactiEZ 0.88g 环境),将 1600000000
改成 2600000000
即可。
in graph_image.php and graph_json.php change the 1600000000 to 2600000000
/* override: graph start time (unix time) */
if (!isempty_request_var('graph_start') && get_request_var('graph_start') < 2600000000) {
$graph_data_array['graph_start'] = get_request_var('graph_start');
}
/* override: graph end time (unix time) */
if (!isempty_request_var('graph_end') && get_request_var('graph_end') < 2600000000) {
$graph_data_array['graph_end'] = get_request_var('graph_end');
}
不过答主说这只是个临时修复方法,还是得官方修正才好。但对于我们这停止维护的旧版 Cacti 还是先用着这方法将就下吧。
太厉害了,我正头疼这个奇怪的问题呢,刚开始还以为是rrdtools出了问题导致的数据错误,顺着问题出现的时间节点排查半天也没找到异常,受教了,感谢博主