使用awstats分析nginx日誌
AWStats是一款免費的功能強大的工具,它以圖形方式生成高級web、流、FTP或郵件服務器統計信息。可以以CGI或從命令行方式運行,並在幾個圖形網頁中顯示日誌包含的所有可能信息。
本文主要介紹centos6.9下安裝、配置awstats,並統計nginx訪問日誌
2、環境準備
1.1 nginx日誌格式設定:
[root@web data]# vim /usr/local/nginx/conf/nginx.conf log_format access ‘$remote_addr -$remote_user [$time_local] "$request" ‘ ‘$status $body_bytes_sent"$http_referer" ‘ ‘"$http_user_agent" $http_x_forwarded_for‘; access_log log/access.log access;
如果使用了網站使用了CDN或者代理, 則格式應該有所調整,以便第一個參數為真實客戶端的地址:
[root@web data]# vim /usr/local/nginx/conf/nginx.conf
log_format access ‘$http_x_forwarded_for -$remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent"$http_referer" ‘
‘"$http_user_agent" $remote_addr‘;
access_log log/access.log access;
2.2 nginx日誌切割:
nginx的日誌不能像apache一樣去用cronolog工具進行切割,這裏我們就寫一個腳本,讓它可以在每天00:00自動執行,切割昨天的日誌(交由awstats分析),並壓縮前天的日誌(壓縮日誌可減小存儲空間)。
[root@web data]# vim /data/scripts/cut_nginx_log.sh #!/bin/bash # Settings logs_path="/data/wwwlogs" back_path="/data/backup/wwwlogs" log_file=access.log date_dir=${back_path}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/$(date -d "yesterday" +"%d")/ gzip_date_dir=${back_path}/$(date -d "-2 day" +"%Y")/$(date -d "-2 day" +"%m")/$(date -d "-2 day" +"%d")/ # Settings End mkdir -p $date_dir [ -d $logs_path ] && cd $logs_path || exit 1 [ -f $log_file ] && /bin/mv $log_file $date_dir ||exit 1 [ $? -eq 0 ] && /usr/local/nginx/sbin/nginx -s reopen [ -f ${gzip_date_dir}*.log ] && /usr/bin/gzip ${gzip_date_dir}*.log || exit 1
執行crontab -e 配置00:00進行切割即可
3、awstats安裝配置
3.1安裝
cd /usr/local/src
wget http://prdownloads.sourceforge.net/awstats/awstats-7.6.tar.gz
tar xvf awstats-7.6.tar.gz
mv awstats-7.6 /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
3.2生成web站點配置文件
生成的配置文件,默認存儲在/etc/awstats下, 如下為生產步驟:
[root@web local]# cd /usr/local/awstats/tools
[root@web tools]# ./awstats_configure.pl
......
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:
> log.test.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):
> #直接回車
-----> Create config file ‘/etc/awstats/awstats.log.test.com.conf‘
Config file /etc/awstats/awstats.log.test.com.conf created.
-----> 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=log.test.com
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...
以下直接回車即可
默認會在/etc/awstats目錄下生成一個/etc/awstats/awstats.test.com.conf的配置文件
3.3 修改web站點配置文件
vim /etc/awstats/awstats.test.com.conf
LogFile="/data/backup/wwwlogs/%YYYY-24/%MM-24/%DD-24/zhibo.log"
...
DirData="/data/awstats"
LogFile是對應上面Nginx日誌切割所生成的目錄存放位置,註意awstats的年月日格式,-24表示昨天的日誌。此處年月日都需要-24, 否則跨年或跨月時會報錯。
DirData指數據文件保存目錄, 這個文件需要真實存在,否則會報錯
分析的執行順序是:
Nginx 產生日誌 –> 日誌切割 –> Nginx 繼續產生日誌 –> 另存切割日誌 –> 交由Awstats統計 –> 生成結果
3.4 生成靜態統計數據
創建記錄數據的目錄:mkdir -p /data/awstats
生成靜態文件/usr/local/awstats/tools/awstats_buildstaticpages.pl -update -config=log.test.com -lang=cn -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -dir=/data/awstats/
參數說明:
/usr/local/awstats/tools/awstats_buildstaticpages.pl Awstats靜態頁面生成工具
-update -config=log.test.com 更新配置項
-lang=cn 語言為中文
-dir=/data/awstats 統計結果輸出目錄
-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl Awstats 日誌更新程序路徑
3.5 修改nginx配置文件,添加日誌分析結果站點(添加虛擬主機)
vim /usr/local/nginx/conf/vhost/awstats.conf
#cat /usr/local/nginx/conf/vhosts/awstats.conf
server {
listen 8080;
server_name logs.yourdomain;
access_log /home/logs/awstats_access.log;
root /data/awstats; #html存放目錄
index index.html;
location /awstats/classes/ {
alias /usr/local/awstats/wwwroot/classes/;
}
location /awstats/css/ {
alias /usr/local/awstats/wwwroot/css/;
}
location /awstats/icon/ {
alias /usr/local/awstats/wwwroot/icon/;
}
location /awstats-icon/ {
alias /usr/local/awstats/wwwroot/icon/;
}
location /awstats/js/ {
alias /usr/local/awstats/wwwroot/js/;
}
location /awstatsicons/ {
alias /usr/local/awstats/wwwroot/icon/;
}
location ~ ^/icon/
{
root /usr/local/awstats/wwwroot;
index index.html;
access_log off;
error_log off;
}
}
3.6 添加定時任務,每晚分析nginx日誌
vim /data/scripts/awstats.sh
#!/bin/bash
back_path="/data/backup/wwwlogs"
log_file=access.log
date_dir=${back_path}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/$(date -d "yesterday" +"%d")/
if [ -f &data_dir$log_file ]
then
/usr/local/awstats/tools/awstats_buildstaticpages.pl -update -config=log.c.com -lang=cn -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -dir=/data/awstats/
else
exit 1
在網站訪問低谷,創建定時任務
crontab -e
0 5 * * * cd /data/scripts && sh awstats.sh >/dev/null 2>&1
如果你已經切割了日誌,現在就可以通過http://ogs.yourdomain:8080 來訪問靜態頁面了
使用awstats分析nginx日誌