awstats与nginx结合使用
最近客户希望安装一个日志分析软件,于是就想到了awstats,记得以前是用awstats和apache结合使用的,但是客户使用的是nginx,这个有点麻烦,因为awstats和nginx结合的并不好,尤其是日志格式,这需要自己把nginx的日志格式转换成awstats能够识别的格式。安装环境:
CentOS 5.4 32位
nginx:1.0.4
awstats:7.0
一、设置好yum源
1.32位设置:
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
rpm -Uvh rpmforge-release-0.5.1-1.el5.rf.i386.rpm
2.64位设置
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
rpm -Uvh rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
3.编辑repo文件
vim rpmforge.repo
enabled = 0
二、安装、配置awstats
yum install --enablerepo=rpmforge awstats
cp /etc/awstats/awstats.localhost.localdomain.conf
/etc/awstats/awstats.www.example.com.conf
vim /etc/awstats/awstats.www.example.com.conf
LogFile=gzip -d /etc/cron.d/updateGeoIP
四、配置nginx的日志
vim /etc/logrotate_nginx.conf
daily
rotate 3000
missingok
notifempty
dateext
compress
sharedscripts
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}
mkdir /etc/cron.jiuri/
vim /etc/cron.jiuri/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate_nginx.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE] nginx"
fi
exit 0
编辑cron,每天23:59分执行nginx的logrotate
echo '59 23 * * * root bash /etc/cron.jiuri/logrotate' >/etc/cron.d/nginxlogrotate
五、更新awstats的日志目录
当然用脚本自动去更新了,脚本如下
[*]cat merge_nginx_log.sh
[*]#!/bin/bash
[*]# Description : This script is for the awstat to merge logs and update awstat data
[*]# 2010-10-09
[*]#
[*]
[*]AWSTAT_BIN="/var/www/awstats/awstats.pl"
[*]YEAR=$(date +%Y)
[*]MONTH=$(date +%m)
[*]DAY=$(date +%d)
[*]DATE=$(date '+%Y%m%d' -d "1 day ago")
[*]LOG_DIR=/var/log/nc_merge_nginx_log
[*]LOCK_FILE=/var/lock/subsys/nc_merge_nginx_log
[*]SSH_RSA_KEY=/home/ncadmin/.ssh/id_rsa
[*]
[*]SERVER=( "srv-example-web1" "srv-example-web2" "srv-example-web3" "srv-example-web4" )
[*]NGINX_LOG_DIR="/var/log/nginx/www.example.com"
[*]NGINX_LOG="mixi.example.mobi_access.log"
[*]SAVE_FOLDER="/var/www/awstats/nginx_logs/ww.example.com"
[*]DST_FOLDER="$SAVE_FOLDER"/"$YEAR"/"$MONTH"/"$DAY" //nginx日志转换格式后保存的目录
[*]AWSTAT_CFG=mixi.example.mobi # IN "/etc/awstats/awstats.www.example.com.conf"
[*]
[*]
[*]define_log(){
[*] LOG_PATH="$LOG_DIR"/"$YEAR"/"$MONTH"/"$DAY"
[*] [ ! -d "$LOG_PATH" ] && mkdir -p "$LOG_PATH"
[*]
[*] LOG="$LOG_DIR"/"$YEAR"/"$MONTH"/"$DAY"/nc_merge_nginx_log.log
[*] echo $LOG
[*]}
[*]
[*]
[*]get_log_from_nodes(){ //把压缩后的nginx log拷贝到awstats的目录里并解压,awstats会根据这里的log提取信息
[*] for srv in ${SERVER
[*]}
[*] do
[*] [ ! -d "$DST_FOLDER" ] && mkdir -p "$DST_FOLDER"
[*] scp -i $SSH_RSA_KEY ncadmin@"$srv":"$NGINX_LOG_DIR"/"$NGINX_LOG"-"$DATE".gz "$DST_FOLDER"/"$NGINX_LOG"-"$DATE"-"$srv".log.gz
[*] gunzip -f "$DST_FOLDER"/"$NGINX_LOG"-"$DATE"-"$srv".log.gz
[*] done
[*]}
[*]
[*]clean_old_log(){ //清理超过3天的awstats目录里的日志,就是拷贝过来的日志
[*] keep_day=3
[*] find "$SAVE_FOLDER" -type f -ctime +$((keep_day-1)) -exec rm -rf '{}' ';'
[*]}
[*]
[*]update(){
[*] $AWSTAT_BIN -config="$AWSTAT_CFG" -configdir=/etc/awstats -update -showsteps
[*] $AWSTAT_BIN -config="$AWSTAT_CFG" -configdir=/etc/awstats -update -showsteps-databasebreak=day
[*]}
[*]
[*]if [ -f "$LOCK_FILE" ] ;then
[*] echo "There is a same script running!" >> $LOG 2>&1
[*]else
[*] touch "$LOCK_FILE"
[*] define_log
[*] get_log_from_nodes >> $LOG 2>&1
[*] update >> $LOG 2>&1
[*] clean_old_log >> $LOG 2>&1
[*] rm -rf "$LOCK_FILE"
[*]fi
echo '59 3 * * * root bash -x /opt/ncscripts/nmerge_nginx_log.sh' >/etc/cron.d/awstat_update
六、安装 perl-fastcgi
yum install perl-FCGI perl-pmtools
perl -MCPAN -e 'install FCGI'
[*]
vim /etc/init.d/perl-fastgi
[*]#!/bin/bash
[*]#
[*]# perl-fastcgi - this script starts and stops the perl-fastcgi Daemon
[*]#
[*]# chkconfig: - 85 15
[*]# description:perl-fastcgi is an perl FASTCGI Daemon
[*]# processname: perl-fastcgi
[*]
[*]PERL_SCRIPT=/usr/bin/fastcgi-wrapper.pl
[*]FASTCGI_USER=nginx
[*]RETVAL=0
[*]start(){
[*] echo -n 'Perl FASTCGI Starting ...'
[*] $PERL_SCRIPT
[*] RETVAL=$?
[*] [ $RETVAL -ne 0 ] && echo -e "\t " || echo -e "\t "
[*]}
[*]
[*]stop(){
[*] echo -n 'Perl FASTCGI Stopping ...'
[*] killallfastcgi-wrapper.pl
[*] RETVAL=$?
[*] [ $RETVAL -ne 0 ] && echo -e "\t " || echo -e "\t "
[*]}
[*]
[*]case "$1" in
[*] start)
[*] start
[*];;
[*] stop)
[*] stop
[*];;
[*] restart)
[*] stop
[*] sleep 1
[*] start
[*];;
[*] *)
[*] echo "Usage: perl-fastcgi {start|stop|restart}"
[*] exit 1
[*];;
[*]esac
[*]exit $RETVAL
mkdir /var/run/nginx
vim /usr/bin/fastcgi-wrapper.pl
$socket = FCGI::OpenSocket( "127.0.0.1:8999", 200 ); #use IP sockets
/etc/init.d/perl-fastcgi start
七、配置nginx
vim /etc/nginx/conf.d/awstats.conf
server {
server_name _;
listen30443;
ssl on;
ssl_certificate /etc/nginx/ssl_key/example.crt;
ssl_certificate_key /etc/nginx/ssl_key/example.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
auth_basic "Restricted";
auth_basic_user_fileconf.d/.example_auth;
access_log /var/log/nginx/awstats/access_logs.example.com.logmain;
error_log /var/log/nginx/awstats/error_logs.example.com.log;
root /var/www/awstats/;
index index.html;
location ~* .*\.pl$ {
root /var/www/awstats/;
fastcgi_pass 127.0.0.1:8999;
fastcgi_index awstats.pl;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME/var/www/awstats/awstats.pl;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
}
location ~ ^/awstats/ {
root /var/www/awstats/;
index index.html;
}
}
/etc/init.d/nginx>
八、测试
https://www.example:30443/awstats.pl?config=www.example.com
页:
[1]