其实思路很简单,首先将应用服务器上的web日志上传到日志分析服务器上,再通过日志服务器上的日志分析系统对这些日志进行分析处理,我用的日志分析系统是AWStats+JAWStats,最后在应用服务上和日志服务器上建立简单的批处理脚本,通过系统提供的任务计划命令建立计划任务,让这些脚本在指定的时间自动运行。

   1、用NcFTP client提供的ncftpput命令将应用服务器上的日志文件上传到日志分析服务器上,处理脚本uploadLog.bat:

 
  
  1. echo 脚本执行的时间:%date%-%time% >>update-log.log 
  2. echo 初始化必要参数 
  3. rem 用于生产存储要上传日志的的临时文件夹 
  4. set fileName=%date:~0,4%%date:~5,2%%date:~8,2% 
  5. rem 要上传日志的目录 
  6. set logDir=E:\mylog\W3SVC704085285 
  7. set logDate=0 
  8. rem 压缩文件所在的目录 
  9. set zipDir=E:\Program Files\7-Zip 
  10. rem 登录远程FTP所需要的设置的参数 
  11. set user=×× 
  12. set pass=×× 
  13. set ftpServerAddress=192.168.×.× 
  14. set rCD=web-log\server1 
  15. set updateFile=%logDir%\%fileName%.zip 
  16. rem 建立临时文件文件 
  17. if not exist mkdir "%logDir%/%fileName%" 
  18. echo 存放要上传日志的临时文件夹%fileName%已建成>>update-log.log 
  19. rem 将要上传的日志文件移到临时文件夹里 
  20. forfiles /p %logDir% /m *.log /d -%logDate% /c "cmd /c move @file %logDir%\%fileName%" >>update-log.log 
  21. echo 要上传的日志文件已经成功移到临时文件夹:%fileName%>>update-log.log 
  22. rem 将临时文件要上传的日志文件打包 
  23.  
  24. echo 现在正在将要上传的日志打包,请稍等>>update-log.log 
  25. "%zipDir%\7z.exe" a "%logDir%\%fileName%.zip" "%logDir%\%fileName%\*" 
  26. echo 打包完成>>update-log.log 
  27. echo ********************************************************>>update-log.log 
  28. rem 将日志上传到远程服务器 
  29. echo 开始上传日志到远程服务器>>update-log.log 
  30. ncftpput -u %user% -p %pass% %ftpServerAddress% %rCD% %updateFile% 
  31. echo 日志文件已经成功上传到远程服务器>>update-log.log 
  32. echo ************************************************************ 
  33. rem 清楚临时文件 
  34. echo 正在清除临时文件...>>update-log.log 
  35. rd /q /s "%logdir%\%fileName%" 
  36. del /q /f "%logdir%\%fileName%.zip" 
  37. echo 临时文件清理完成 >>update-log.log 
  38. echo 此次上传日志完成>>uploadLog.log.log 
  39. echo ************************************************************ 
  40. end 

   2、建立计划任务,让uploadLog.bat脚本在每周的周三和周日的23自动执行,在命令行输入命令:at 23:00 /every:W,Su E:/scripts/uploadLog.bat,也可以用windows提供的图形界面完成这个设置,这里就不说明了。

  3、在日志服务器上建立批处理脚本analyseLog.bat,假设我有应用服务器三台,分别是server1、server2和server3:

 
  
  1. rem 自动分析日志 
  2. echo 初始化参数 
  3. set domain=**.com 
  4. set zipDir=C:/Program Files/7-Zip 
  5. set awstatsBin=E:/AWStats/wwwroot/cgi-bin 
  6. echo run at %date%-%time%>> analyse.log 
  7.  
  8. for %%j in (sever1 server2 server3) do ( 
  9.    set serverName= %%j 
  10.    echo 正在处理Q:\%%j.%domain%中的日志。。。 
  11.    for /f %%a in ('dir Q:\%%j.%domain%\*.zip /b') do ( 
  12.        set zipFile=%%~nxa  
  13.        echo 找到文件:!zipFile! 
  14.        "%zipDir%/7z.exe" e Q:\%%j\!zipFile! -oQ:\%%j -y >>analyse.log  
  15.        echo decompression finished... 
  16.        perl %awstatsBin%/awstats.pl -config=%%j.%domain%.com -update -configdir=%awstatsBin%/ -DatabaseBreak=month >>analyse.log 
  17.        echo month method analyise finished 
  18.        perl %awstatsBin%/awstats.pl -config=%%j.%domain%.com -update -configdir=%awstatsBin%/ -DatabaseBreak=day >>analyse.log 
  19.        echo day method analyise finished 
  20.        rem 规定处理过的日志文件 
  21.        move Q:\%%j.%domain%.com\!zipFile! Q:\%%j.%domain%.com\2012 >>analyse.log 
  22.        move Q:\%%j.%domain%.com\*.log Q:\%%j.%domain%.com\2012 >>analyse.log 
  23.        echo move files finished 
  24. echo !serverName!.%domain%.com-finish@%time%>>analyse.log 
  25. echo  analyse finished.. 
  26. echo *******************************************************>>analyse.log 
  27.  

    4、同样建立计划任务,让analyseLog.bat脚本在每周的周四和周一的23自动执行,在命令行输入命令:at 23:00 /every:M,Th E:/scripts/analyseLog.bat。

    最后将批处理脚本保护起来,可以将批处理文件加密,或编译,我是用windows提供的加密方法将脚本加密,简单方便。到这里自动化分析web日志的方法就算完成了。