我的环境是:

1、有多个反向代理(VPS)在异地
2、每台反向代理承担多个域名
3、每个域名不一定都有用户访问
 
要求:实现日志自动分析.
 
需要注意的是关于每个域名的awstats分析结果的保存位置规划。本人脚本一般,大神略过。呵呵
 
我的作法:
反向代理:每天定时压缩日志到一个固定的目录, 判断文件如果大于8M,那么认为它是有写日志的,然后开始压缩。
  有个多域名,每个域名每天都做日志轮换。
 
做个计划任务,每天自动压缩日志
 
  1. #!/bin/bash -x 
  2. #used for zip nginx log 
  3. logs_path="/usr/local/nginx/logs" 
  4. temp_path="/nginx_log_temp" 
  5. YESTERDAY=`date +%Y%m%d -d "yesterday" ` 
  6.  
  7. test -e $temp_path || mkdir $temp_path  
  8.  
  9. rm -rf $temp_path/* 
  10.  
  11. cd ${logs_path}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/ 
  12.  
  13. for i in domain1 domain2 domain3  
  14. do 
  15.     if [ `du  $i.log.$YESTERDAY|awk '{if($1>8208){print $NF}}'` ];then 
  16.         tar -czf $i.log.$YESTERDAY.tar.gz $i.log.$YESTERDAY 
  17.         mv  $i.log.$YESTERDAY.tar.gz $temp_path 
  18.     fi 
  19. done 
 
日志分析服务器:(没有任何的端口隐射。)
a、每天定时sftp 下载昨天的日志,自动解压到固定的目录(不同的反向代理解析到不同的目录),前提是要做好SSH免密码登录. (略过)
 
 
  1. #!/bin/bash -x 
  2. #used for donwload logfile 
  3. down_tmp="/tmp/down_tmp" 
  4. test -e $down_tmp || mkdir $down_tmp 
  5.  
  6. for i in domain1 domain2 domain3
  7. do 
  8.     test -e /tmp/$i || mkdir /tmp/$i 
  9. done 
  10.  
  11. for i in a.a.a.a b.b.b.b c.c.c.c d.d.d.d 
  12. do 
  13.     cd  /tmp/down_tmp/$i 
  14.     test -e /tmp/unzip_tmp/$i || mkdir -p /tmp/unzip_tmp/$i 
  15.     sftp root@$i:/nginx_log_temp/ << EOF 
  16.         get *.tar.gz 
  17.         exit     
  18. EOF 
  19.     for a in ` ls -l | grep .tar.gz | awk '{print $NF}'` 
  20.     do 
  21.          
  22.         tar -xzf $a -C /tmp/unzip_tmp/$i 
  23.     done 
  24. done 
b、每天定时分析日志     
 
  1. [root@localhost ~]# crontab -l 
  2. 0 9 * * *  /bin/bash  /root/sftp_autodown_nginx_log > /dev/null 
  3. 30 9 * * *   /usr/local/awstats/tools/awstats_updateall.pl now > /dev/null