awstats分析Nginx日志

最近两天心血来潮,很想知道自己VPS下的每个域名每天要走多少流量

主要原因有朋友淘宝开店,相册空间不够了,准备暂时把图放我vps上,因为小店,流量不多,所以就试试,不过我还是很想知道每天用了多少

虽然我有装vnstat,但是只能看我每个网卡的流量,不能区分对于每个域名的请求

于是只能从Nginx上想办法,网上看了有很多日志分析的工具,其中awstats貌似很强大,因此弄来试试,下面是按照配置过程

》》》》》》》》》》》》》》》华丽丽的分割线《《《《《《《《《《《《《《《《《《

本文记录的环境是用LNMP一键安装包搭建的,如果你也懒人,推荐使用

首先Awstats分析的日志格式有一定要求,而LNMP里的增加vhost的自动配置日志格式仅有一点小不同,你可以直接修改在/root下的vhost.sh,这样你新生成的配置日志格式都是符合Awstats的

编辑vhost.sh,在94行

1
2
3
al="log_format  $al_name  '\$remote_addr - \$remote_user [\$time_local] "\$request" '                                            
'\$status \$body_bytes_sent "\$http_referer" '
'"\$http_user_agent" \$http_x_forwarded_for';

修改为如下代码,其实只是多加了3个双引号

1
2
3
al="log_format  $al_name  '\$remote_addr - \$remote_user [\$time_local] "\$request" '
'\$status \$body_bytes_sent "\$http_referer" '
'"\$http_user_agent" "\$http_x_forwarded_for"';

如果你已经建立好vhost的配置,那只有修改现有配置了,把日志格式改为下面样式

1
2
3
log_format  xxx.com  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

之前我一直没做日志切分,因为小博没啥流量,日志很小,切不切分都无所谓,不过为了awstats分析日志,这次也对日志做了下切分

使用shell脚本定时切分的,脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
# The Nginx logs path
logs_path="/home/wwwlogs/"
# 你的日志名,一般用LNMP一键安装包的就是你的域名,如果有多个,就填到下面数组里
logs_names=(access xxx.com xxx.net)
num=${#logs_names[@]}
for((i=0;i<num ;i++));do
mkdir -p ${logs_path}${logs_names[i]}/$(date -d "yesterday" +"%Y%m")
log_name="${logs_path}${logs_names[i]}.log"
if [ -f "$log_name" ]; then
mv ${logs_path}${logs_names[i]}.log ${logs_path}${logs_names[i]}/$(date -d "yesterday" +"%Y%m")/${logs_names[i]}_$(date -d "yesterday" +"%Y%m%d").log
fi
done
/usr/local/nginx/sbin/nginx -s reopen

然后在crontab里添加每天0点运行此脚本即可

日志会被切分成下面的名字,路径为/home/wwwlogs/yourdomains/yearmonth/

然后就是安装Awstats,我安装的为当前最新版,Version: 7.0

awstats的安装不需要编译,只需要下载后解压到你需要的路径,当然一如既往的/usr/local

1
2
3
4
5
6
wget http://awstats.sourceforge.net/files/awstats-7.0.tar.gz
tar xvf awstats-7.0.tar.gz
mv awstats-7.0 /usr/local/awstats
chown -R root.root /usr/local/awstats
chmod +x /usr/local/awstats/tools/*.pl
chmod +x /usr/local/awstats/wwwroot/cgi-bin/*.pl

这就算安装完成了,下面就是新建配置
/usr/local/awstats/tools/awstats_configure.pl
按提示输入下面信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
-----> Running OS detected: Linux, BSD or Unix

-----> 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 #我们需要新建一个配置

-----> 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:
>xxx.com #配置文件的名字,为了区分多域名,建议使用域名

-----> 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):
> #使用默认路径就好,直接回车

剩下的全部回车确认就好,一个配置文件就这么创建好了

但是默认配置里的日志名和我们实际的日志名有差别,还需要修改下,配置文件位于/etc/awstats/awstats.xxx.com.conf

1
LogFile="/var/log/httpd/mylog.log"

修改为如下

1
LogFile="/home/wwwlogs/xxx.com/%YYYY-24%MM-24/xxx.com_%YYYY-24%MM-24%DD-24.log"

然后建立Awstats的数据目录

1
mkdir -p /var/lib/awstats

因为使用Nginx,对perl支持不好,因此我们需要生成静态页面

建立目录存放静态页面

1
mkdir -p /home/wwwroot/awstats

然后建立一个脚本,用crontab定时运行这个脚本生成静态页面

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
logs_names=(xxx.com xxx.net)
num=${#logs_names[@]}
for((i=0;i<num ;i++));do
mkdir -p /home/wwwroot/awstats/${logs_names[i]}
/usr/local/awstats/tools/awstats_buildstaticpages.pl -update \
-config=${logs_names[i]} -lang=cn -dir=/home/wwwroot/awstats/${logs_names[i]} \
-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl
chown -R www.www /home/wwwroot/awstats/${logs_names[i]}
done

我是让这个脚本定时在0:30运行,会把需要分析的域名日志都生成静态页到/home/wwwroot/awstats中,只需要你访问
http://your ip/awstats/xxx.com/awstats.xxx.com.html

然后为了页面能正常显示里面的图片,需要在nginx的配置文件中加入这段,修改/usr/local/nginx/conf/nginx.conf

1
2
3
4
5
location ~ ^/icon/ {
root /usr/local/awstats/wwwroot;
index index.html;
access_log off;
}

好了,到这里每天0:30后你就能看到昨天的流量信息,本文主要为了记录,因此没有把所有步骤都写的很详细,如果有哪里不懂欢迎留言

声明: 除非注明,小峰网络遨游记文章均为原创,转载请以链接形式标明本文地址

本博客原创文字只代表本人某一时间内的观点或结论,与本人所在公司没有任何关系。

本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

第三方若用于商业用途的转载,须取得本人授权。

本文作者:

本文地址:http://xfeng.me/awstats-analytics-nginx-log/

你可能还对下面文章感兴趣: