2020年9月13日晚,Cacti时间过滤器出现BUG,致全球Cacti用户受影响,本文于吴昊博客首发,转载请标明出处!!!
在14号的时候群里大部分用户反馈,时间过滤器突然出现问题,选择时间过滤后没效果,最近时间也无效,点击没反应,经过Github官方反馈得知,由于时间戳设置的问题,导致图形过滤器出现故障。
存在BUG的版本:
>=0.8.7<1.2.10
0.8.7至1.2.10所有版本,均会出现此故障
不受影响的版本:
>=1.2.10后所有版本,<0.8.7前所有版本
问题分析:
Cacti从0.8.7版本开始,也就是说在2007年(13年前)设置了时间戳的值为1600000000,转换成时间为2020-09-13 20:26:40,表示在2020年9月13日20点26分40秒后,选择过滤图形时间会导致失效,图形过滤器出现BUG。
修复方法:
0.8.7版本至1.0.0版本修复方法如下:
修改当前web根目录下的graph_xport.php和graph_image.php两个文件,查找1600000000,每个文件中会有两个这个值,将其全部改成2088385563,修改后无需重启任何服务,直接刷新当前浏览器即可!
1 2 3 4 5 6 7 8 |
if (!empty($_GET["graph_start"]) && $_GET["graph_start"] < 1600000000) { $graph_data_array["graph_start"] = $_GET["graph_start"]; } /* override: graph end time (unix time) */ if (!empty($_GET["graph_end"]) && $_GET["graph_end"] < 1600000000) { $graph_data_array["graph_end"] = $_GET["graph_end"]; } |
1.0.0版本至1.2.10版本修复方法如下:
修改当前web根目录下的graph_image.php、graph_json.php、graph_xport.php、remote_agent.php这四个文件,查找1600000000,将其全部改成2088385563,修改后无需重启任何服务,直接刷新当前浏览器即可!
1 2 3 4 5 6 7 8 |
if (!isempty_request_var('graph_start') && get_request_var('graph_start') < 1600000000) { $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') < 1600000000) { $graph_data_array['graph_end'] = get_request_var('graph_end'); } |
为什么要改成2088385563?
其实此BUG,官方在1.2.10版本时已经修复了,因为时间没到,一直没触发BUG。
官方在1.2.10版本中将1600000000改成了FILTER_VALIDATE_MAX_DATE_AS_INT变量,此变量定义的值是2088385563,也就是说在2036-03-06 11:06:03后,还会出现时间戳故障。
所以说这个2088385563值不是固定的,你也可以改成2600000000,不过我相信2088385563这个值已经够用了,我们可以来预测一下2036年Cacti还会更新么?
原文链接:Cacti时间过滤器出现BUG,致全球Cacti用户受影响(首发),转载请注明来源!
多谢吴昊,已打赏 ^_^
刚刚遇到这个问题,刚巧看到博主的资料,按照步骤已经修复,谢谢了
我的cacti-Version 0.8.8b和cacti-Version 1.1.23按照博主得步骤改了时间戳,时间过滤器bug已修复,谢谢!
我的版本是1.2.2,也出现了,请问下怎么解决
昨天发现的故障,早上找到的解决方法修复,实际测试从2020年9月13号20点26分钟之后就出现了这种情况,只是一直没注意,知道昨天才发现的故障?
感谢大佬给出了官方解释,可以交差了
运维网的二次开发版,修改完之后图形无法显示了,修改回去值也无法显示,请问怎么破?
只针对官方原版,非官方版不一定有效
大佬 我这个是centos 7的系统,cacti版本1.2.3,最近也是发现查询时间失效了,后来发现您这篇文章,修改那4个文件数值后,查询时间还是发现实效,大佬有碰见这种情况么,我Q 284119484
清空浏览器缓存重试!
清空过了,也不管用呢,各种方式都试过了呢
那还不如改成2600000000,就只改一个数字,话说int的取值范围那么大,为什么不能改一个更大的数字呢,非要到时再改吗?
牛皮 , 我是加了一个else判断,你这种方法更简单。
哥哥你好6啊,不懂开发的小网工就等这个呢,我这就去试试