- 事故詳情
2020年9月13日晚,Cacti時間過濾器出現BUG,致全球Cacti用戶受影響,具體故障現象為 選擇時間過濾后沒效果,最近時間也無效,點擊沒反應,經過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。
3.修復方法
0.8.7版本至1.0.0版本修復方法如下:
修改當前web根目錄下的graph_xport.php和graph_image.php兩個文件,查找1600000000,每個文件中會有兩個這個值,將其全部改成2088385563,修改后無需重啟任何服務,直接刷新當前瀏覽器即可!
if (!empty($_GET["graph_start"]) && $_GET["graph_start"] < 1600000000) {
$graph_data_array["graph_start"] = $_GET["graph_start"];
}
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,修改后無需重啟任何服務,直接刷新當前瀏覽器即可!
if (!isempty_request_var('graph_start') && get_request_var('graph_start') < 1600000000) {
$graph_data_array['graph_start'] = get_request_var('graph_start');
}
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還會更新么?
注釋:本文轉載至吳昊博客