日志分析工具Awstats实战之Nginx篇

zongyimin 2013-10-31

前言:
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可以分析apache日志,同样也可以分析nginx日志。本文将详细介绍自动定时切割nginx的访问日志,并使用awstats来定时分析nginx日志及实现统计结果可供安全便捷的查阅。

一、日志自动切割
对于nginx的日志切割,由于没有像apache一样去用cronolog工具,这里我们就写一个脚本,让它可以在每天00:01自动执行,切割昨天的日志(交由awstats分析),压缩前天的日志(压缩日志可减小存储空间,为防止awstats没有分析完就被压缩,所以只压缩前天的日志)。

vim /server/scripts/cut_nginx_log.sh

输入以下内容:

#!/bin/sh
yesterday=`date -d "yesterday" +"%Y%m%d"`
before_yesterday=`date -d "-2 day" +"%Y%m%d"`
Nginx_Dir="/usr/local/nginx"
Nginx_logs="/app/logs"
Log_name="www_access"
cd /tmp
[ -d $Nginx_Logs ] && cd $Nginx_logs || exit 1
[ -f $Log_Name.log ] && /bin/mv $Log_Name.log ${Log_Name}_${yesterday}.log || exit 1
if [ $? -eq 0 -a -f $Nginx_Dir/logs/nginx.pid ]
    then
      kill -USR1 `cat $Nginx_Dir/logs/nginx.pid`
fi
[ -f  ${Log_Name}_${before_yesterday}.log ] && /usr/bin/gzip ${Log_Name}_${before_yesterday}.log|| exit 1

执行crontab -e将该脚本加入定时任务中

1 0 * * * /bin/sh /server/scripts/cut_nginx_log.sh >/dev/null 2>&1

这样每天凌晨00:01就能自动实现日志的切割,压缩等功能了

因为本次实验下的nginx此时已经有日志了,另外为了后文awstats能对切割过的日志进行分析,所以这里我们要运行一下此脚本,来将现有日志进行切割生成昨天的日志方便后文操作。

/bin/sh /server/scripts/cut_nginx_log.sh >/dev/null 2>&1

二、Awstats的安装与配置

1.部署awstats
首先我们要下载awstats软件包,并将其放在常规目录(/usr/local)下

wget http://awstats.sourceforge.net/files/awstats-7.2.tar.gz
tar zxf awstats-7.2.tar.gz
mv awstats-7.2 /usr/local/awstats

由于wget下载下来的包中权限是非root的,所以这里要修改权限,否则稍后*.pl将无法运行

chown -R root.root /usr/local/awstats
chmod +x /usr/local/awstats/tools/*.pl
chmod +x /usr/local/awstats/wwwroot/cgi-bin/*.pl


接下来我们要执行awstats/tools下的awstats_configure.pl配置向导,用来生成awstats的配置文件,awstats配置文件的命名规则是awstats.website.conf。

cd /usr/local/awstats/tools/
./awstats_configure.pl


这里更改的目的是指定awstats的数据库配置文件(即awstats的数据库(纯文本))。
由于,此处没有/usr/local/awstats/data目录,所以我们要创建出来

mkdir /usr/local/awstats/data

以上的两个替换操作进行完之后一定要用命令查看替换是否成功,以便及早发现纰漏。

查询替换结果正确之后,即可进行下面的步骤。

awstats_buildstaticpages.pl会根据-config的参数去读取里面的DirData路径下的数据库配置文件,然后生成静态的html文件,生成的文件重定向到/www/awstats目录下。

三、配置nginx实现安全访问
接下来我们要配置nginx使其能安全的访问到分析的数据
vim /usr/local/nginx/conf/nginx.conf

由于nginx没有好的加密认证工具,需要借助apache的htpasswd来实现加密认证功能
htpasswd -c -m /usr/local/nginx/htpasswd.pass linuxidcadmin      #用户名为linuxidcadmin

推荐阅读:

AWStats 的详细介绍:请点这里
AWStats 的下载地址:请点这里

相关推荐