nginx日志分割处理以及分析

在很多时候,我们会非常关注网站的访问量,比如网站的日PV是多少、网站某个功能上线之后点击量是多少,像这些东西都是需要从web容器中的访问日志统计出来的,下面我们看一下如何在nginx中统计网站的访问信息

1、设置Nginx访问日志记录格式
在默认情况下,nginx只是记录相关get信息,像post页面是不记录的,所以下面需要修改nginx.conf,让其访问日志记录post等请求信息,在nginx.conf中server段中加入如下信息

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 /usr/local/nginx/logs/access.log access;

2、设置日志定期截取
设置日志定期截取一是为了方便查阅,二是为了I/O拥塞(截止到目前笔者维护过的服务器中单台服务器日访问日志大小就达到1.6G,如果不定期截取,由于文件内容较大,后期对文件进程查询、移动时将会严重影响系统性能)。nginx日志格式不像apache、resin那么人性化,nginx访问日志无法在nginx的配置文件中设置成按日期格式存储,目前常见的设置方法主要靠第三方工具或者脚本来实现,下面我们就通过一个最简单的脚本进行实现

#vi /etc/nginx_access_log.sh
#!/bin/bash
mv /usr/local/nginx/logs/access.log /opt/nginx_access_`date +%Y%m%d`.log
killall -s USR1 nginx

脚本说明:这个脚本主要实现两个功能,一是将nginx访问日志按照日期移动到目的地,而是移动完毕后让nginx重新生成日志文件

#chmod +x /etc/nginx_access_log.sh

使用cron服务定期执行该脚本,下面设置成的是每晚23点59执行,这样nginx访问日志正好记录的是全天的访问记录
#crontab -e
59 23 * * * /etc/nginx_access_log.sh

3、日志查询
下面做一个最简单的统计,统计http://blog.luwenju.com页面的日点击量是多少
#grep -c ‘http://blog.luwenju.com/‘ /opt/nginx_access_20110815.log
396

总结:像本篇文章所介绍的统计方法只适合访问量较小、应用相对简单的网站,像复杂应用、访问量较大的网站还需要借助第三方工具来统计,目前应用最广泛的是awstats,《Nginx日志分析(下)》将介绍如何使用awstats来分析nginx日志

http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3582157

第一步,日志的处理

最好每天分割一下日志,一开始没注意这个工作,结果不久日志文件就上G了,很痛苦。分割日志很简单,首先把日志文件复制到别的地方,然后再通知nginx重新生成日志就可以了。shell脚本如下:

#
!/bin/bash

logs_path
=
"
/nginx/logs/
"

mv ${logs_path}access
.
log
 ${logs_path}access_$(date 
-

"
yesterday
"
 
+
"
%Y%m%d
"
)
.
log

kill
 
-
USR1 `cat 
/
nginx
/
logs
/
nginx
.
pid`

代码中的/nginx/logs指的是nginx的log日志文件所在目录,生成了以昨天日期命名的日志文件。

为了达到每天自动分割的目的,在crontab中加入以下部分:

1
 
0
 
*
 
*
 
*
 sh 
/
home
/
zyf
/
sh
/
cut_nginx_log
.
sh

这样就每天的0点1分把nginx日志重命名为日期格式,并重新生成今天的新日志文件。

第二步,Awstats的配置。


日志文件分割好了,接下来就是分析了,也就是Awstats的使用了。

Awstats的配置文件默认会存储在/etc/awstats/目录下,包括你安装时设置的域名如:awstats.www.xxxxke.com.conf。在这个配置文件中修改这个地方:

LogFile
=
"
/nginx/logs/access_%YYYY-0%MM-0%DD-24.log
"

这个意思是要去读取nginx昨天的日志文件,关于后边%YYYY-0%MM-0%DD-24的设置,规则如下:

#
 You can also use tags in this filename if you need a dynamic file name
# depending on date or time (Replacement is made by AWStats at the beginning
# of its execution). This is available tags :
#   %YYYY-n  is replaced with 4 digits year we were n hours ago
#   %YY-n    is replaced with 2 digits year we were n hours ago
#   %MM-n    is replaced with 2 digits month we were n hours ago
#   %MO-n    is replaced with 3 letters month we were n hours ago
#   %DD-n    is replaced with day we were n hours ago
#   %HH-n    is replaced with hour we were n hours ago
#   %NS-n    is replaced with number of seconds at 00:00 since 1970
#   %WM-n    is replaced with the week number in month (1-5)
#   %Wm-n    is replaced with the week number in month (0-4)
#   %WY-n    is replaced with the week number in year (01-52)
#   %Wy-n    is replaced with the week number in year (00-51)
#   %DW-n    is replaced with the day number in week (1-7, 1=sunday)
#                              use n=24 if you need (1-7, 1=monday)
#   %Dw-n    is replaced with the day number in week (0-6, 0=sunday)
#                              use n=24 if you need (0-6, 0=monday)
#   Use 0 for n if you need current year, month, day, hour

第三步,开始分析、生成结果。

最后,可以执行分析了。使用这个命令:

/
usr
/
local
/
awstats
/
wwwroot
/
cgi
-
bin
/
awstats
.
pl 
-
update 
-
config
=
www
.
xxxxke
.
com

这个命令会把结果生成到/var/lib/awstats 目录下 awstatsXXXX.www.XXXX.com.txt文件。

当然啦,这样看起来不太方便哦,呵呵,可以再用下面的命令来生成html页面,相当漂亮:

perl /usr/local/awstats/tools/awstats_buildstaticpages.pl -update \
 -config=www.xxxxoke.com -lang=cn \ 
-dir=/html/awstats \
-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl

这样就会在/html/awstats目录下生成很漂漂的分析结果页,很暴力很强大。

第四步,自动化。

要是每天都去服务器上运行几条命令肯定是件令人烦燥的事情,所以呢,linux的世界里有crontab这样的好东东,很简单,下面是我的crontab

1
 
0
 
*
 
*
 
*
 sh 
/
home
/
zyf
/
sh
/
cut_nginx_log
.
sh

0
 
1
 
*
 
*
 
*
 
/
usr
/
local
/
awstats
/
wwwroot
/
cgi
-
bin
/
awstats
.
pl 
-
update 
-
config
=
www
.
xxxxke
.
com

0
 
2
 
*
 
*
 
*
 perl 
/
usr
/
local
/
awstats
/
tools
/
awstats_buildstaticpages
.
pl 
-
update 
-
config
=
www
.
xxxxke
.
com 
-
lang
=
cn 
-
dir
=/
html
/
awstats 
-
awstatsprog
=/
usr
/
local
/
awstats
/
wwwroot
/
cgi
-
bin
/
awstats
.
pl

-------------------------------------------------------------------------

大功告成,打完收功……

http://www.cnblogs.com/amboyna/archive/2009/08/09/1542171.html

时间: 2024-10-10 22:45:25

nginx日志分割处理以及分析的相关文章

nginx 日志分割(简单、全面)

Nginx 日志分割 因业务需要做了简单的Nginx 日志分割, 第1章 详细配置如下. #建议在mkdir  /home/shell  -p 专门写shell 脚本位置 [email protected]:/home/shell# cat nginxcut.sh #!/bin/sh ##### #by xuebao #2017.05.16 date=`date +%Y%m%d` nginxlog="/app/logs/nginx/" /bin/mv ${nginxlog}www_ac

nginx日志分割脚本

nginx 日志分割,可以分割一年内没有分割的日志,以每天一个日志文件打包 转载请注明出处:http://lm3810.blog.51cto.com/846925/1860543 #!/bin/bash #hls_nginx_log_cut.sh #by Louis 2016/10/10 logs_path='/data/store/logs/www/' #日志文件所在路径 files=`ls $logs_path` backup_path='/data/store/backuplogs/' #

nginx日志分割小脚本

nginx的日志一直是写在一个文件上面,运行久了之后文件会非常大,因此我们有必要对nginx的日志进行分割: 1 2 3 4 5 6 7 8 9 10 11 #! /bin/bash ACCESS_LOG=/data/nginx/www.log ERROR_LOG=/data/nginx/error.log YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) #mv logs echo "move log files" mv ${A

nginx日志分割:windows和linux

一.为什么对日志进行分割. 1.nginx日志默认情况下统统写入到一个文件中,文件会变的越来越大. 2.单个的日志文件非常不方便查看分析. 二.简析日志分割. 不论是windows还是linux,对日志的分割都是一条思路.即: 1.对现有日志文件进行重命名. 2.生成新的日志文件. 3.定制脚本,定时执行. 三.日志分割实操. windows系统: 1.logcut.bat #定义时间(年月日) for /f "tokens=1 delims=/ " %%j in ("%da

Nginx日志分割处理

一.配置nginx日志 location /html/ {         root  /home/web;         index  index.html index.htm;         access_log  /var/log/nginx/ad-access.log_pipe  ad_access; } ad_access:为配合日志格式. 先创建管道:mkfifo /var/log/nginx/ad-access.log_pipe 启动cronolog: nohup cat /v

nginx日志分割

1.写一个切割的脚本 进入vhost目录下 cd /usr/local/nginx/conf/vhosts 2.打开一个文件 vim /usr/local/sbin/nginx_logrotate.sh  ---日志文件都放在这个目录下面 添加以下内容 #!/bin/bash d='date -d "-1 day" +%F' [ -d /tmp/nginx_log ] || mkdir /tmp/nginx_log mv /tmp/access.log  /tmp/nginx_log/

nginx 日志分割脚本

#!/bin/bash # 01 00 * * * /nginxlogs/ngx_logcut.sh  >/dev/null 2>&1   ##可以放到计划任务里自动执行脚本 pidfile=/var/run/nginx.pid      #nginx进程pid文件 logpath='/nginxlogs/'            #日志目录 keepdays=30                       #日志保存天数 logfiles=(error.log access.log

nginx日志分割并定期删除

#!/bin/bash #切割nginx的日志,然后定期删除 source /etc/profile log_path=/usr/local/nginx/logs d=`date +%Y-%m-%d` d90=`date -d'5 day ago' +%Y-%m-%d`   ##5天前 cd ${log_path} && cp access.log $log_path/backuplog/accesslog$d.log gzip -f $log_path/backuplog/accessl

nginx 日志分割

利用 crontab + shell 来实现nginx的 access log 按天切割,便于统计.具体实现如下: shell: #! /bin/sh NGINX_DIR=/data/apps/nginx LOGS_PATH=$NGINX_DIR/logs ## 获取昨天的 yyyy-MM-dd YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) ## 移动文件 mv ${LOGS_PATH}/access.log ${LOGS_PATH}/acces