什麼時候需要重新分析某時段呢? 大部份都是擦屁股用的。
比較常見就是 Loading balance 時,把不同主機的 log 另外合成一份 awstats 報表。過了一段時間才發現有某個主機上的 Log 忘了放,而且因為又必須加算進去的時候,就可以照這個方式來處理。
首先,先找到 awstats 安裝的 cgi-bin 目錄,如:
/usr/local/awstats/wwwroot/cgi-bin/
再來就找網站及月份的檔名,例如網站設定的代碼是 neo ,要找 2005 年 5 月份的統計資料,就是找 awstats052005.neo.txt 。
如果 httpd log 檔案全都還在,尚未 logrotate 掉的話,可以建議你直接把某月份的統計檔名 (如 awstats052005.neo.txt ) 先移到某個暫存目錄後,再執行 awstats.pl,awstats 就會把那個月的資料重新分析一次。
再來回到正題,如果只要某個區間的話,雖然下面這個方法比較笨,但是比較不會發生人為的錯誤。
修改前準備:
如果有把 awstats 設在 crontab 的話,記得先註解掉,以免資料錯亂。
第一步:
先把要統計的 Log 資料用編輯器打開,刪掉不要統計的日期,就只留要統計的區段就可以了,並且「另存新檔」為一個暫存檔名。
第二步:
把awstats 設定檔 (如: /etc/awstats/awstats.neo.conf) 中的 LogFile 改為剛剛存好的暫存檔名。(原來的 LogFile 那行請先用 # 做註解)
第三步:
(重要!) 一定要先備份 aswstats 的統計檔 (如: /usr/local/awstats/wwwroot/cgi-bin/awstats052005.neo.txt) 。
備分完成後再用 vi 開啟,大約在 47 行的地方可以看到:
LastLine 20050524221739 373293 77426276 0 FirstTime 20050501000031 LastTime 20050524221726 LastUpdate 20050527000009 373293 373285 0 0 8
這幾行是做什麼的,上面都有寫註解。
因為我們剛剛已經在暫存檔中把要加入統計的部份給過濾出來了,所以行號的部份完全不用理會,全部改 0 就可以了,重點是每行的日期碼。
如果我要重新計算 20050522 (2005年5月22) 到 20050523 (2005年5月23) 的資料,相信第一步裡面的暫存檔應該也只有這些時段資料,我只要更改 LastLine 、LastTime、LastUpdate 的年份跟月份就可以了,保險一點可以設定為前一天(5/21),時分秒的部分可以補零處理。(但是原資料記得也要註解起來)
#LastLine 20050524221739 373293 77426276 0 LastLine 20050521000000 0 0 0 FirstTime 20050501000031 #LastTime 20050524221726 LastTime 20050521000000 #LastUpdate 20050527000009 373293 373285 0 0 8 LastUpdate 20050521000000 0 0 0 0 0
第四步:
執行 awstats 的統計分析動作,如 :
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=neo -update
第五步:
產生完成之後就可以到 awstats 的報表網址去看看了。
第六步:
確定資料都進報表了,就可以把 awstats 的設定檔 (如: /etc/awstats/awstats.neo.conf) 中的 LogFile 的部份也改回原來正常使用的檔案。
至於統計檔 (如: /usr/local/awstats/wwwroot/cgi-bin/awstats052005.neo.txt) 也要回復到「第三步」一模一樣的數字 (也把黃字的部份都拿掉),這樣下次 awstats 才能正常統計。
LastLine 20050524221739 373293 77426276 0 FirstTime 20050501000031 LastTime 20050524221726 LastUpdate 20050527000009 373293 373285 0 0 8
註:
因為 awstats 更新過後 LastLine 、LastTime、LastUpdate 數字會不太一樣,但是只要完全回覆到「第三步」中全白字的那個狀態就可以了。
最後再把 crontab 也記得改回來,就大功告成了。