其实思路很简单,首先将应用服务器上的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日志的方法就算完成了。
转载于:https://blog.51cto.com/anliang/892641