当前位置: 首页 > 图文教程 > 服务器 > Linux服务器 > 使用awstats分析Nginx的访问日志

Linux服务器
Linux上双网卡绑定方法(Suse9SP3)
Linux操作系统调优参数的意义
Linux下使用SSH客户端及其Sftp文件传送
教你恢复被误删除的Linux文件
SQL Server注入大全及防御
Linux无法解析域名的解决办法
Linux系统下安装和配置MyEclipse的方法
Ubuntu下VirtualBox 1.4.0设置文件共享
Windows与Linux系统共享StarDict字典文件
修改Linux下相关的登陆信息
Windows通过SecureCRT远程登录Linux主机
Linux操作系统如何修改SWAP交换区的大小
Linux操作系统下为Apache目录添加密码
Linux时间设置与同步(NTP)
Linux内核补丁AMD旁路转换缓冲(TLB)错误
Linux架设DHCP服务器的方法
Fedora 8下Apache配置与管理
Linux操作系统下用单网卡捆绑双IP的方法
Ubuntu Linux系统环境变量配置文件
SUSE Linux中将Tomcat作为Service运行

Linux服务器 中的 使用awstats分析Nginx的访问日志


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-18   浏览: 220 ::
收藏到网摘: n/a

前言

在我的上一篇文章《linux.chinaitlab.com/server/768231.html" target=_blank>使用 Nginx 提升网站访问速度》中介绍了 Nginx 这个 HTTP 服务器以及如何通过它来加速网站的访问速度。在实际的网站运营中,我们经常需要了解到网站的访问情况,例如每天有多少 IP 在访问、PV 数是多少、哪个 URL 访问量最大、用户使用最多的浏览器是哪个、都是通过什么方式知道这个网站的以及有多少用户访问出错等等,通过掌握这些信息来提高用户的体验,从而改善网站的质量。一般我们可以通过一些免费的访问统计网站例如 Google Analytics 来或者这些信息。但不足之处是这类网站只能对页面进行分析,不包括静态文件;另外可能有很多的站长不愿意使用这类工具来暴露自己的数据,种种的这些因素使站长希望自己来分析访问日志。而 awstats 就可以满足所有的这些需求。

Awstats 是在 SourceForge 上发展很快的一个基于 Perl 的 WEB 日志分析工具,一个充分的日志分析让 Awstats 显示您下列资料:

●访问次数、独特访客人数,

●访问时间和上次访问,

●使用者认证、最近认证的访问,

●每周的高峰时间(页数,点击率,每小时和一周的千字节),

●域名/国家的主机访客(页数,点击率,字节,269域名/国家检测, geoip 检测),

●主机名单,最近访问和未解析的 IP 地址名单

●大多数看过的进出页面,

●档案类型,

●网站压缩统计表(mod_gzip 或者 mod_deflate),

●使用的操作系统 (每个操作系统的页数,点击率 ,字节, 35 OS detected),

●使用的浏览器,

●机器人访问(检测 319 个机器人),

●蠕虫攻击 (5 个蠕虫家族),

●搜索引擎,利用关键词检索找到你的地址,

●HTTP 协议错误(最近查阅没有找到的页面),

●其他基于 URL 的个性报导,链接参数, 涉及综合行销领域目的.

●贵网站被加入"最喜爱的书签".次数.

●屏幕大小(需要在索引页补充一些 HTML 标签).

●浏览器的支持比例: Java, Flash, RealG2 reader, Quicktime reader, WMA reader, PDF reader.

●负载平衡服务器比率集群报告.

Awstats 的运行是需要 PERL 环境的支持,从 awstats 的文档来看,它对 Apache HTTP Server 的支持是非常完美的,而当我们把 Web 服务器换成 Nginx 后,要运行 awstats 变得很麻烦。首先 Nginx 本身对 Perl 的支持是比较弱的,甚至官方也不建议使用;另外在日志格式上有需要修改后才能运行。

本文主要介绍通过让 awstats 对日志统计的结果生成静态页面,然后通过 Nginx 输出以达到统计 Nginx 访问日志的效果,其中还包括如何让 Nginx 自动切割日志文件。

配置 Nginx 自动切割日志

跟 Apache HTTP Server(以下称 Apache)不同的是,Apache 可以将日志输出通过管道的方式进行重新定向,依此来进行自动的日志切割。Nginx 在现今版本上还没能跟 Apache 一样,通过%YY等参数按日期分批创建日志,但是通过给 nginx 进程发送一个特定的信号,可以使 nginx 重新生成日志文件。我们可以定期执行一个 Shell 脚本来切换日志,重新命名或转移,具体的脚本如下:

# mv /opt/nginx/logs/access.log /opt/nginx/logs/access_`date +%Y%m%d`.log

# killall –s USR1 nginx #使用USR1参数通知Nginx进程切换日志文件

将以上脚本内容保存为文件名为 logcron.sh 存到自定的目录中,例如 /opt/nginx/sbin/logcron.sh

使用 Crontab 让该脚本程序在每天晚上 11 点 59 分自动执行,即可做到按天创建日志。

安装和配置 Awstats

安装之前,必须确认你的服务器上 Perl 的环境已经就绪。

查看当前环境 Perl 版本的命令是 perl –version

我们还需要对 Nginx 的日志格式做个小修改,不然 awstats 将无法进行统计。

例子如下(加粗部分):

# vi /opt/nginx/conf/nginx.confserver {listen 80;server_name localhost;location ~ ^/web/ {root /data/web;index index.html;error_log off;charset gb2312;}log_format new_log #格式代称 (注意,如果有多个虚拟主机,代称不能一样)'$remote_addr - $remote_user [$time_local] $request ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log new_log; #日志生成路径}

下载最新版本的 awstats 包,下载地址请见文章最后的参考资料。把下载后的 tar 包解压到任意目录中,例: /usr/local/awstats 。然后执行 tools 目录中的 awstats_configure.pl 配置向导,创建一个新的统计。

-----> Check for web server installEnter full config file path of your Web server.Example: /etc/httpd/httpd.confExample: /usr/local/apache2/conf/httpd.confExample: c:\Program files\apache group\apache\conf\httpd.confConfig 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 AWStatsscript 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/profilefile (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.mysite.com

Example: demo

Your web site, virtual server or profile name:

#> www.moabc.net #统计网站的域名 例:

www.moabc.net

回车

-----> 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.moabc.net

#回头把该命令填入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.moabc.net.conf

#新配置文件所在的路径

You should have a look inside to check and change manually main parameters.

You can then manually update your statistics for 'www.moabc.net' with command:

> perl awstats.pl -update -config=www.moabc.net

You can also build static report pages for 'www.moabc.net' with command:

> perl awstats.pl -output=pagetype -config=www.moabc.net

Press ENTER to finish...

回车完成向导,接下来修改 www.moabc.net 的统计配置

#vi /etc/awstats/awstats.www.moabc.net.conf

找到统计的日志文件的路径

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 所统计的日志,是已切下来的那部分。也能调转顺序,先统计完了再切。不过这比较容易造成统计的遗漏。配置修改完成后,保存退出。然后我们可以开始试一下手动执行。

1.先执行日志切割脚本 logcron.sh 把 Nginx 的日志切下来。

2.然后执行 Awstats 日志更新程序开始统计分析。

# /opt/nginx/sbin/logcron.sh

# /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.moabc.net

Create/Update database for config "/etc/awstats/awstats.www.moabc.net.conf"

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.moabc.net -lang=cn -dir=/data/admin_web/awstats \

-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl

上述命令的具体意思如下:

●/usr/local/awstats/tools/awstats_buildstaticpages.pl Awstats 静态页面生成工具

●-update -config=www.moabc.net 更新配置项

●-lang=cn 语言为中文

●-dir=/data/admin_web/awstats 统计结果输出目录

●-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl Awstats 日志更新程序路径。

接下来,只需在nginx.conf 中,把该目录配置上去即可。例子如下:(加粗部分):

server {

listen 80;

server_name localhost;

location ~ ^/web/ {

root /data/web;

index index.html;

error_log off;

charset gb2312;

}

location ~ ^/awstats/ { # html 静态页面目录

root /data/webroot/awstats;

index index.html;

access_log off;

error_log off;

charset gb2312; #最好把默认编码改成 gb2312避免浏览器因自动编码出现乱码的情况

}

location ~ ^/icon/ { # 图标目录

root /usr/local/awstats/wwwroot;

index index.html;

access_log off;

error_log off;

charset gb2312;

}

}

用浏览器查看到统计的详细结果 http://youhostname/awstats/awstats.www.moabc.net.html

至此,使用 awstats 已能完全支持 Nginx 的日志统计。

配置 Awstats 自动运行

为了让整个日志的统计过程自动完成,我们需要设置 crontab 计划任务,让 Nginx 日志切割以及 Awstats 自动运行,定时生成结果页面。

#vi /etc/crontab

11 59 * * * /opt/nginx/sbin/logcron.sh #半夜11:59 进行日志切割

00 1 * * * /usr/local/awstats/tools/awstats_buildstaticpages.pl \

-update -config=www.moabc.net -lang=cn -dir=/data/admin_web/awstats \

-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl

#凌晨00:01 Awstats进行日志分析

:wq保存退出

#crontab /etc/crontab 指定cron所执行的配置档路径

保护日志统计结果页面

一般站长都不愿随便让人知道自己站的真实流量,所以要把 Awstats 统计结果页面进行密码保护。Nginx 使用的是跟 Apache 一样的密码加密格式,这里需要用到 apache 自带的工具 htpasswd。

如果你在本机上默认装有 Apache,这你就只需在它的程序目录下运行

例:

#/usr/local/apache2/bin/htpasswd -c admin.pass admin #用户名为adminNew password: 输入密码Re-type new password: 重复输入Adding password for user admin 创建成功然后把 admin.pass 这个密码包找个的地方藏起来.修改 nginx.conf 在 location 中加入(加粗部分):server { listen 80; server_name localhost; location ~ ^/web/ { root /data/web; index index.html; error_log off; charset gb2312; } location ~ ^/awstats/ { # html 静态页面目录 root /data/admin_web; index index.html; access_log off; error_log off; charset gb2312; auth_basic "admin"; #用户名 /opt/ngx/conf/admin.pass; #密码包路径 } location ~ ^/icon/ { # 图标目录 root /usr/local/awstats/wwwroot; index index.html; access_log off; error_log off; charset gb2312; }}修改 Nginx 配置完毕后,执行命令 killall –s HUP nginx 让 Nginx 重新加载配置即可。

总结

尽管跟 Apache HTTP Server 相比较而言,Nginx 的功能是比较弱的,但是我们依然可以利用一些技巧来规避这些弱点,Nginx 的设计者肯定也是充分考虑到这个问题。现在也越来越多的第三方开发的模块在逐渐的扩展 Nginx 的功能。但是从应用本身的角度而言,Nginx 更倾向于卓越的性能,而非大而全的功能,因而在一些附加方面的功能,我们也不能对之要求过高。