Finer04's Blog
首页
乱写一通
脑洞破文
随便谈谈
当前播放.page
解决 Cacti 设定时间范围后图形不生效的问题
Finer04
September 17, 2020
1664 字
文章目录
前几天我们的 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](https://github.com/Cacti/cacti/issues/3798) 就有这个问题的反馈,查看原因[^回答: https://github.com/Cacti/cacti/issues/3798#issuecomment-691887255]是这个 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 还是先用着这方法将就下吧。 
1 条评论
游客1
September 21st, 2020 at 06:33 pm
太厉害了,我正头疼这个奇怪的问题呢,刚开始还以为是rrdtools出了问题导致的数据错误,顺着问题出现的时间节点排查半天也没找到异常,受教了,感谢博主
评论已关闭
▲ Top
太厉害了,我正头疼这个奇怪的问题呢,刚开始还以为是rrdtools出了问题导致的数据错误,顺着问题出现的时间节点排查半天也没找到异常,受教了,感谢博主