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