现在的位置: 首页运维|APPServer, 运维|日志技术>正文
利用awstats分析nginx日志
发表于478 天前 运维|APPServer, 运维|日志技术 暂无评论 ⁄ 被围观 +

Nginx + Awstats + Fastcgi + Perl配置手册
author: author:xupeng(xupeng@joysteam.com)
date: 2011-01-24
desc: 用Awstats来分析Nginx日志,并通过Fastcgi方式来访问。
=========================================================================
1. awstats配置安装:

cd /usr/local
wget http://prdownloads.sourceforge.net/awstats/awstats-7.0.tar.gz
tar -zxvf awstats-7.0.tar.gz
mv awstats-7.0 awstats
chown -R www:www wwwroot

#执行awstats_configure.pl进行配置

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

#修改配置文件

vi /etc/awstats/awstats.example.com.conf

LogFile="/usr/local/nginx/logs/access_%YYYY-0%MM-0%DD-24.log"
LogFormat="%host - %time1 %methodurl %code %bytesd %refererquot %uaquot %other"

==========================================================================

2. 创建和配置FPM
#安装FCGI.pm,FCGI::ProcManager

cpan>install FCGI
cpan>install FCGI::ProcManager

#拷贝cgiwrap-fcgi.pl文件到/usr/local/bin/下,并赋予执行权限

chmod 755 /usr/local/bin/cgiwrap-fcgi.pl
mkdir -p /var/run/nginx/
mkdir -p /var/lib/awstats

#启动daemon,并设置socket权限为nginx用户读写,否则502

/usr/local/bin/cgiwrap-fcgi.pl > /dev/null 2>&1 &
chown -R www:www /var/run/nginx/cgiwrap-dispatch.sock

#停止daemon命令

ps aux|grep perl-fcgi-pm #获得进程id
kill -TERM 进程id

==========================================================================

3. Nginx 配置

vi /usr/local/nginx/conf/fastcgi_params

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
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  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  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

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;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

配置nginx

vi /usr/local/nginx/conf/nginx.conf

#awstats format 注意要和awstats的log格式一样,包括空格,否则无法生成数据
#awstats format
	log_format  main '$remote_addr - [$time_local] "$request"'
	' $status $body_bytes_sent "$http_referer" "$http_user_agent" $upstream_cache_status';
	access_log  logs/access.log main;

server {
    # ip和server_name 自行修改
	listen 127.0.0.1:80;
	server_name n1.awstats.com;
	access_log off;

	root /usr/local/awstats/wwwroot;
	index index.html;

	location ~ ^/cgi-bin/.*\.cgi$ {
		gzip off;
		fastcgi_pass  unix:/var/run/nginx/cgiwrap-dispatch.sock;
		fastcgi_index index.cgi;
		include fastcgi_params;
	}
}

=============================================================================

4. 定时脚本:

脚本内容如下:

touch /usr/local/nginx/sbin/logcron.sh && chmod u+x /usr/local/nginx/sbin/logcron.sh
#!/bin/bash
# author:xupeng(xupeng@joysteam.com)
# 日志切割脚本
mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access_`date +%Y%m%d`.log
kill -s SIGUSR1 `cat /usr/local/nginx/nginx.pid`
touch /usr/local/nginx/sbin/awstats_up.sh && chmod u+x /usr/local/nginx/sbin/awstats_up.sh
内容如下:
#!/bin/bash
# author:xupeng(xupeng@joysteam.com)
# 更新awstats日志
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=example.com

#添加crontab任务:

#23:59切割nginx日志

59 23 * * * /usr/local/nginx/sbin/logcron.sh

# 2点开始生成awstats统计数据

00 2 * * * /usr/local/nginx/sbin/awstats_up.sh

访问方式:
修改hosts
74.222.1.131 n2.awstats.com
URL:http://n2.awstats.com/cgi-bin/awstats.pl?config=img3.bizark.cn

附件下载:cgiwrap-fcgi

给我留言


/ 快捷键:Ctrl+Enter
不想听你唠叨×