配置nginx 日志切割
修改日志格式
log_format combined_realip '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" ';
如果,你使用了代理,那么日志格式为:
log_format combined_realip '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" ';
下载awstats 软件
wget http://cdnetworks-kr-1.dl.source ... awstats-6.95.tar.gz
或者:http://www.ypl.cc/attachments/month_1011/awstats-6.95.tar.gz
tar zxvf awstats-6.95.tar.gz
安装 awstats
mv awstats-6.95 /usr/local/awstats
cd /usr/local/awstats/tools
创建一个新的统计
./awstats_configure.pl
-----> Check for web server install
Enter full config file path of your Web server.
Example: /etc/httpd/httpd.conf
Example: /usr/local/apache2/conf/httpd.conf
Example: c:\Program files\apache group\apache\conf\httpd.conf
Config file path ('none' to skip web server setup):
#> none #因为我们这里用的是 Nginx,所以写 none,跳过。
回车
Your web server config file(s) could not be found.
You will need to setup your web server manually to declare AWStats
script as a CGI, if you want to build reports dynamically.
See AWStats setup documentation (file docs/index.html)
-----> Update model config file '/usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf'
File awstats.model.conf updated.
-----> Need to create a new config file ?
Do you want me to build a new AWStats config/profile
file (required if first install) [y/N] ?
#> y #y 创建一个新的统计配置
回车
-----> Define config file name to create
What is the name of your web site or profile analysis ?
Example: www.ypl.cc
Example: demo
Your web site, virtual server or profile name:
#> www.ypl.cc #统计网站的域名 例:
www.ypl.cc
回车 -----> Define config file path
In which directory do you plan to store your config file(s) ?
Default: /etc/awstats
Directory path to store config file(s) (Enter for default):
#>
使用默认直接回车,接下来便会出现以下的提示 ----> Add update process inside a scheduler
Sorry, configure.pl does not support automatic add to cron yet.
You can do it manually by adding the following command to your cron:
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.ypl.cc
#回头把该命令填入crontab 按指定时间执行
Or if you have several config files and prefer having only one command:
/usr/local/awstats/tools/awstats_updateall.pl now
Press ENTER to continue... 回车继续
A SIMPLE config file has been created: /etc/awstats/awstats.www.ypl.cc.conf
#新配置文件所在的路径
You should have a look inside to check and change manually main parameters.
You can then manually update your statistics for 'www.ypl.cc' with command:
> perl awstats.pl -update -config=www.ypl.cc
You can also build static report pages for 'www.ypl.cc' with command:
> perl awstats.pl -output=pagetype -config=www.ypl.cc
Press ENTER to finish...
修改日志格式
log_format combined_realip '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" ';
如果,你使用了代理,那么日志格式为:
log_format combined_realip '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" ';
下载awstats 软件
wget http://cdnetworks-kr-1.dl.source ... awstats-6.95.tar.gz
或者:http://www.ypl.cc/attachments/month_1011/awstats-6.95.tar.gz
tar zxvf awstats-6.95.tar.gz
安装 awstats
mv awstats-6.95 /usr/local/awstats
cd /usr/local/awstats/tools
创建一个新的统计
./awstats_configure.pl
-----> Check for web server install
Enter full config file path of your Web server.
Example: /etc/httpd/httpd.conf
Example: /usr/local/apache2/conf/httpd.conf
Example: c:\Program files\apache group\apache\conf\httpd.conf
Config file path ('none' to skip web server setup):
#> none #因为我们这里用的是 Nginx,所以写 none,跳过。
回车
Your web server config file(s) could not be found.
You will need to setup your web server manually to declare AWStats
script as a CGI, if you want to build reports dynamically.
See AWStats setup documentation (file docs/index.html)
-----> Update model config file '/usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf'
File awstats.model.conf updated.
-----> Need to create a new config file ?
Do you want me to build a new AWStats config/profile
file (required if first install) [y/N] ?
#> y #y 创建一个新的统计配置
回车
-----> Define config file name to create
What is the name of your web site or profile analysis ?
Example: www.ypl.cc
Example: demo
Your web site, virtual server or profile name:
#> www.ypl.cc #统计网站的域名 例:
www.ypl.cc
回车 -----> Define config file path
In which directory do you plan to store your config file(s) ?
Default: /etc/awstats
Directory path to store config file(s) (Enter for default):
#>
使用默认直接回车,接下来便会出现以下的提示 ----> Add update process inside a scheduler
Sorry, configure.pl does not support automatic add to cron yet.
You can do it manually by adding the following command to your cron:
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.ypl.cc
#回头把该命令填入crontab 按指定时间执行
Or if you have several config files and prefer having only one command:
/usr/local/awstats/tools/awstats_updateall.pl now
Press ENTER to continue... 回车继续
A SIMPLE config file has been created: /etc/awstats/awstats.www.ypl.cc.conf
#新配置文件所在的路径
You should have a look inside to check and change manually main parameters.
You can then manually update your statistics for 'www.ypl.cc' with command:
> perl awstats.pl -update -config=www.ypl.cc
You can also build static report pages for 'www.ypl.cc' with command:
> perl awstats.pl -output=pagetype -config=www.ypl.cc
Press ENTER to finish...
0
回车完成向导,接下来修改 www.ypl.cc 的统计配置
#vi /etc/awstats/awstats.www.ypl.cc
找到统计的日志文件的路径
LogFile="/var/log/httpd/mylog.log"
改为
LogFile="/opt/nginx/logs/access_%YYYY-0%MM-0%DD-0.log
对应上边 Nginx 日志切割程序的所生成的目录存放结构,要注意 Awstats 的年月日格式的跟 Nginx 的写法有所不同。我们现在执行统计的顺序是:
Nginx 产生日志 –> 日志切割 –> Nginx 继续产生日志 –> 另存切割日志 –> 交由Awstats统计 –> 生成结果
在本文中 Awstats 所统计的日志,是已切下来的那部分。也能调转顺序,先统计完了再切。不过这比较容易造成统计的遗漏。配置修改完成后,保存退出。然后我们可以开始试一下手动执行。
先执行日志切割脚本 logcron.sh 把 Nginx 的日志切下来。
然后执行 Awstats 日志更新程序开始统计分析。
# /opt/nginx/sbin/logcron.sh
# /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.ypl.cc
Create/Update database for config "/etc/awstats/awstats.www.ypl.cc"
by AWStats version 6.7 (build 1.892)
From data in log file "/opt/nginx/logs/access_20080804.log"...
Phase 1 : First bypass old records, searching new record...
Direct access after last parsed record (after line 450421)
Jumped lines in file: 450421
Found 450421 already parsed records.
Parsed lines in file: 120
Found 0 dropped records,
Found 0 corrupted records,
Found 0 old records,
Found 120 new qualified records.
看到以上显示,证明日志切割和 Awstats 都已经运行无误了。统计分析完成后,结果还在 Awstats 的数据库中。在 Apache 上,可以直接打开 Perl 程序的网页查看统计。但本文开始时已经提到,Nginx 对 Perl 支持并不好,所以我们要换个方法,利用 awstats 的工具将统计的结果生成静态文件,具体的步骤如下:
首先在 webroot 目录下创建一个文件夹。例:/data/webroot/awstats
然后让 Awstats 把静态页面生成到该目录中
# mkdir /data/webroot/awstats
# /usr/local/awstats/tools/awstats_buildstaticpages.pl -update \
-config=www.ypl.cc -lang=cn -dir=/data/webroot/awstats \
-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl
上述命令的具体意思如下:
/usr/local/awstats/tools/awstats_buildstaticpages.pl Awstats 静态页面生成工具
-update -config=www.ypl.cc 更新配置项
-lang=cn 语言为中文
-dir=/data/webroot/awstats 统计结果输出目录
-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl Awstats 日志更新程序路径。
接下来,只需在nginx.conf 中,把该目录配置上去即可。例子如下:(加粗部分):
server
{
listen 80 ;
server_name awstats.ypl.cc;
index index.html index.htm index.php;
root /data/webroot/awstats;
access_log /dev/null;
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html)$
{
access_log off;
expires 30d;
}
}
ln -s /usr/local/awstats/wwwroot/icon/ /data/wwwroot/awstat/icon
用浏览器查看到统计的详细结果 http://youhostname/awstats/awstats.www.ypl.cc.html
至此,使用 awstats 已能完全支持 Nginx 的日志统计。
配置 Awstats 自动运行
为了让整个日志的统计过程自动完成,我们需要设置 crontab 计划任务,让 Nginx 日志切割以及 Awstats 自动运行,定时生成结果页面。
#vi /etc/crontab
0 0 * * * /opt/nginx/sbin/logcron.sh
1 0 * * * /usr/local/awstats/tools/awstats_buildstaticpages.pl \
-update -config=www.ypl.cc -lang=cn -dir=/data/webroot/awstats \
-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl
#凌晨00:01 Awstats进行日志分析
#vi /etc/awstats/awstats.www.ypl.cc
找到统计的日志文件的路径
LogFile="/var/log/httpd/mylog.log"
改为
LogFile="/opt/nginx/logs/access_%YYYY-0%MM-0%DD-0.log
对应上边 Nginx 日志切割程序的所生成的目录存放结构,要注意 Awstats 的年月日格式的跟 Nginx 的写法有所不同。我们现在执行统计的顺序是:
Nginx 产生日志 –> 日志切割 –> Nginx 继续产生日志 –> 另存切割日志 –> 交由Awstats统计 –> 生成结果
在本文中 Awstats 所统计的日志,是已切下来的那部分。也能调转顺序,先统计完了再切。不过这比较容易造成统计的遗漏。配置修改完成后,保存退出。然后我们可以开始试一下手动执行。
先执行日志切割脚本 logcron.sh 把 Nginx 的日志切下来。
然后执行 Awstats 日志更新程序开始统计分析。
# /opt/nginx/sbin/logcron.sh
# /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.ypl.cc
Create/Update database for config "/etc/awstats/awstats.www.ypl.cc"
by AWStats version 6.7 (build 1.892)
From data in log file "/opt/nginx/logs/access_20080804.log"...
Phase 1 : First bypass old records, searching new record...
Direct access after last parsed record (after line 450421)
Jumped lines in file: 450421
Found 450421 already parsed records.
Parsed lines in file: 120
Found 0 dropped records,
Found 0 corrupted records,
Found 0 old records,
Found 120 new qualified records.
看到以上显示,证明日志切割和 Awstats 都已经运行无误了。统计分析完成后,结果还在 Awstats 的数据库中。在 Apache 上,可以直接打开 Perl 程序的网页查看统计。但本文开始时已经提到,Nginx 对 Perl 支持并不好,所以我们要换个方法,利用 awstats 的工具将统计的结果生成静态文件,具体的步骤如下:
首先在 webroot 目录下创建一个文件夹。例:/data/webroot/awstats
然后让 Awstats 把静态页面生成到该目录中
# mkdir /data/webroot/awstats
# /usr/local/awstats/tools/awstats_buildstaticpages.pl -update \
-config=www.ypl.cc -lang=cn -dir=/data/webroot/awstats \
-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl
上述命令的具体意思如下:
/usr/local/awstats/tools/awstats_buildstaticpages.pl Awstats 静态页面生成工具
-update -config=www.ypl.cc 更新配置项
-lang=cn 语言为中文
-dir=/data/webroot/awstats 统计结果输出目录
-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl Awstats 日志更新程序路径。
接下来,只需在nginx.conf 中,把该目录配置上去即可。例子如下:(加粗部分):
server
{
listen 80 ;
server_name awstats.ypl.cc;
index index.html index.htm index.php;
root /data/webroot/awstats;
access_log /dev/null;
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html)$
{
access_log off;
expires 30d;
}
}
ln -s /usr/local/awstats/wwwroot/icon/ /data/wwwroot/awstat/icon
用浏览器查看到统计的详细结果 http://youhostname/awstats/awstats.www.ypl.cc.html
至此,使用 awstats 已能完全支持 Nginx 的日志统计。
配置 Awstats 自动运行
为了让整个日志的统计过程自动完成,我们需要设置 crontab 计划任务,让 Nginx 日志切割以及 Awstats 自动运行,定时生成结果页面。
#vi /etc/crontab
0 0 * * * /opt/nginx/sbin/logcron.sh
1 0 * * * /usr/local/awstats/tools/awstats_buildstaticpages.pl \
-update -config=www.ypl.cc -lang=cn -dir=/data/webroot/awstats \
-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl
#凌晨00:01 Awstats进行日志分析
0
另外,我们也可以每小时执行一次日志分析行为。具体任务计划为:
58 * * * * /bin/bash /usr/local/nginx/sbin/log.conf
59 * * * * /usr/local/awstats/tools/awstats_buildstaticpages.pl -update -config=www.ypl.cc -lang=cn -dir=/data/wwwroot/awstat/ -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl >/dev/null
日志切割脚本内容为:
cat /usr/local/nginx/sbin/log.conf
#! /bin/bash
d=`date +%Y%m%d`
d2=`date +%H`
logdir=/var/log/ypl
if [ -e $logdir/access_$d.log ] ; then
mv $logdir/access_$d.log $logdir/access_$d-$d2.log
fi
mv $logdir/access.log $logdir/access_$d.log
/bin/kill -USR1 `cat /usr/local/nginx/var/nginx.pid`
/usr/bin/find $logdir/access_*.log -mtime +6 -exec /bin/rm -rf {} \;
58 * * * * /bin/bash /usr/local/nginx/sbin/log.conf
59 * * * * /usr/local/awstats/tools/awstats_buildstaticpages.pl -update -config=www.ypl.cc -lang=cn -dir=/data/wwwroot/awstat/ -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl >/dev/null
日志切割脚本内容为:
cat /usr/local/nginx/sbin/log.conf
#! /bin/bash
d=`date +%Y%m%d`
d2=`date +%H`
logdir=/var/log/ypl
if [ -e $logdir/access_$d.log ] ; then
mv $logdir/access_$d.log $logdir/access_$d-$d2.log
fi
mv $logdir/access.log $logdir/access_$d.log
/bin/kill -USR1 `cat /usr/local/nginx/var/nginx.pid`
/usr/bin/find $logdir/access_*.log -mtime +6 -exec /bin/rm -rf {} \;
编辑回复