前几天我们的 Cacti 不出图 4 小时了,然后吊了下值班同事顺便重启下设备就好了。正当我以为没事的时候,过了几天就收到值班的同事反馈说 Cacti 的时间范围调了 最后 2 小时 还有 最后 12 小时,下面的预览图形都还是最后24小时的状态。我测试下也是这样,当初看了看配置和 rrdtool 都看不出问题,也强制修改了图形的时间戳还是这样子。我还以为一次重启就搞出这问题,却使劲分析不了什么问题。

问题重现

如图所示,选择最后 2 小时,下面的图形都会成这个样子。

QQ截图20200917203442.jpg

去谷歌下 "Cacti graph time range wrong" 等问题,也看不到什么关键的回答,就今天我换了个思路找问题。

解决办法

我们的预览图形的文件 URL 是(无关的参数已经删了)

/graph_image.php?graph_start=1600338809&graph_end=1600346009

其中决定时间的参数是 graph_startgraph_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 还是先用着这方法将就下吧。

ciallo.png