其實思路很簡單,首先將應用服務器上的web日誌上傳到日誌分析服務器上,再通過日誌服務器上的日誌分析系統對這些日誌進行分析處理,我用的日誌分析系統是AWStats+JAWStats,最後在應用服務上和日誌服務器上建立簡單的批處理腳本,通過系統提供的任務計劃命令建立計劃任務,讓這些腳本在指定的時間自動運行。
1、用NcFTP client提供的ncftpput命令將應用服務器上的日誌文件上傳到日誌分析服務器上,處理腳本uploadLog.bat:
- echo 腳本執行的時間:%date%-%time% >>update-log.log
- echo 初始化必要參數
- rem 用於生產存儲要上傳日誌的的臨時文件夾
- set fileName=%date:~0,4%%date:~5,2%%date:~8,2%
- rem 要上傳日誌的目錄
- set logDir=E:\mylog\W3SVC704085285
- set logDate=0
- rem 壓縮文件所在的目錄
- set zipDir=E:\Program Files\7-Zip
- rem 登錄遠程FTP所需要的設置的參數
- set user=××
- set pass=××
- set ftpServerAddress=192.168.×.×
- set rCD=web-log\server1
- set updateFile=%logDir%\%fileName%.zip
- rem 建立臨時文件文件
- if not exist mkdir "%logDir%/%fileName%"
- echo 存放要上傳日誌的臨時文件夾%fileName%已建成>>update-log.log
- rem 將要上傳的日誌文件移到臨時文件夾裏
- forfiles /p %logDir% /m *.log /d -%logDate% /c "cmd /c move @file %logDir%\%fileName%" >>update-log.log
- echo 要上傳的日誌文件已經成功移到臨時文件夾:%fileName%>>update-log.log
- rem 將臨時文件要上傳的日誌文件打包
- echo 現在正在將要上傳的日誌打包,請稍等>>update-log.log
- "%zipDir%\7z.exe" a "%logDir%\%fileName%.zip" "%logDir%\%fileName%\*"
- echo 打包完成>>update-log.log
- echo ********************************************************>>update-log.log
- rem 將日誌上傳到遠程服務器
- echo 開始上傳日誌到遠程服務器>>update-log.log
- ncftpput -u %user% -p %pass% %ftpServerAddress% %rCD% %updateFile%
- echo 日誌文件已經成功上傳到遠程服務器>>update-log.log
- echo ************************************************************
- rem 清楚臨時文件
- echo 正在清除臨時文件...>>update-log.log
- rd /q /s "%logdir%\%fileName%"
- del /q /f "%logdir%\%fileName%.zip"
- echo 臨時文件清理完成 >>update-log.log
- echo 此次上傳日誌完成>>uploadLog.log.log
- echo ************************************************************
- end
2、建立計劃任務,讓uploadLog.bat腳本在每週的週三和週日的23自動執行,在命令行輸入命令:at 23:00 /every:W,Su E:/scripts/uploadLog.bat,也可以用windows提供的圖形界面完成這個設置,這裏就不說明了。
3、在日誌服務器上建立批處理腳本analyseLog.bat,假設我有應用服務器三臺,分別是server1、server2和server3:
- rem 自動分析日誌
- echo 初始化參數
- set domain=**.com
- set zipDir=C:/Program Files/7-Zip
- set awstatsBin=E:/AWStats/wwwroot/cgi-bin
- echo run at %date%-%time%>> analyse.log
- for %%j in (sever1 server2 server3) do (
- set serverName= %%j
- echo 正在處理Q:\%%j.%domain%中的日誌。。。
- for /f %%a in ('dir Q:\%%j.%domain%\*.zip /b') do (
- set zipFile=%%~nxa
- echo 找到文件:!zipFile!
- "%zipDir%/7z.exe" e Q:\%%j\!zipFile! -oQ:\%%j -y >>analyse.log
- echo decompression finished...
- perl %awstatsBin%/awstats.pl -config=%%j.%domain%.com -update -configdir=%awstatsBin%/ -DatabaseBreak=month >>analyse.log
- echo month method analyise finished
- perl %awstatsBin%/awstats.pl -config=%%j.%domain%.com -update -configdir=%awstatsBin%/ -DatabaseBreak=day >>analyse.log
- echo day method analyise finished
- rem 規定處理過的日誌文件
- move Q:\%%j.%domain%.com\!zipFile! Q:\%%j.%domain%.com\2012 >>analyse.log
- move Q:\%%j.%domain%.com\*.log Q:\%%j.%domain%.com\2012 >>analyse.log
- echo move files finished
- )
- echo !serverName!.%domain%.com-finish@%time%>>analyse.log
- echo analyse finished..
- echo *******************************************************>>analyse.log
- )
4、同樣建立計劃任務,讓analyseLog.bat腳本在每週的週四和週一的23自動執行,在命令行輸入命令:at 23:00 /every:M,Th E:/scripts/analyseLog.bat。
最後將批處理腳本保護起來,可以將批處理文件加密,或編譯,我是用windows提供的加密方法將腳本加密,簡單方便。到這裏自動化分析web日誌的方法就算完成了。