nginx 与 awstats

回复 收藏
配置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...
2010-08-10 10:59 举报
已邀请:
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进行日志分析
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 {} \;
0

方琪

赞同来自:

1
0

方琪

赞同来自:

1
0

善思致用

赞同来自:

不怎么懂

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: