AWStats分析Nginx访问日志

简介:

    AWStats是在Sourceforge上发展很快的一个基于Perl的WEB日志分析工具。

    它可以统计您站点的如下信息:

  • 访问量(UV),访问次数,页面浏览量(PV),点击数,数据流量等

  • 精确到每月、每日、每小时的数据

  • 访问者国家

  • 访问者IP

  • Robots/Spiders的统计

  • 访客持续时间

  • 对不同Files type的统计信息

  • Pages-URL的统计

  • 访客操作系统浏览器等信息

  • 其它信息(搜索关键字等等)

    下面是AWStats分析Nginx日志的操作步骤:

一、配置nginx日志格式

    修改nginx.conf的日志格式,不然awstats无法分析。

1
2
3
4
     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  /var/log/nginx/access .log access;

    注意,日志格式里的双引号不能漏了且每个参数之间是一个空格分隔,因为只要有细微的差别,awstats就无法读取日志。

    改好后,使nginx重读配置文件:

1
shell # nginx -t && nginx -s reload

二、自动切割nginx日志

    每天晚上23点59分定时执行一个shell脚本来切割nginx日志。脚本内容如下:

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
#!/bin/bash
#
# Filename:    nginxCutLog.sh
# Author:      Qicheng
# Website:     http://qicheng0211.blog.51cto.com/
# Description: 切割nginx日志
# Notes:       设置crontab,每天23点59分定时执行
#
ROOT_UID=0
if  "$UID"  - ne  "$ROOT_UID"  ]; then
     echo  "Error: 必须以root用户运行此程序!"
     exit  1
fi
 
nginx_logs_dir= "/var/log/nginx"
nginx_pid_file= "/var/run/nginx.pid"
# 切割后的日志文件名,例如access_20141022.log
nginx_log_today= "$nginx_logs_dir/access_`date +%Y%m%d`.log"
 
while  [ ` date  +%S` - ne  59 ]; do
         sleep  1
done
sleep  1
[ -f  "$nginx_log_today"  ] &&  exit  1
mv  $nginx_logs_dir /access .log $nginx_log_today
# 给nginx发送USR1信号,使重新打开新的access.log日志文件
[ -f $nginx_pid_file ] &&  /bin/kill  -USR1 $( cat  $nginx_pid_file)

    设置crontab:

1
59 23 * * *  /bin/bash  /yourscriptpath/nginxCutLog .sh

三、安装awstats

1
2
3
4
shell # wget http://awstats.sourceforge.net/files/awstats-7.0.tar.gz
shell # tar -zxvf awstats-7.0.tar.gz
shell # mv awstats-7.0 /usr/local/awstats
shell # mkdir -p /var/lib/awstats

四、配置awstats

    进入/usr/local/awstats/tools/目录,执行配置脚本awstats_configure.pl:

1
2
shell # cd /usr/local/awstats/tools/
shell # ./awstats_configure.pl

wKiom1RHIZLC7_9AAAb4OHgq8T4716.jpg

    程序执行结束后,会在/etc/awstats/目录下生成你的配置文件。然后编辑配置文件,修改LogFile参数,跟日志切割脚本中的日志路径对应起来:

1
LogFile= "/var/log/nginx/access_%YYYY-24%MM-24%DD-24.log"

    注意,这里日期格式“%YYYY-24%MM-24%DD-24”,是指24小时之前的年月日,也就是昨天的日期。

    测试:

1
shell # /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=yourwebsite

    注意:-config=后面的参数是你在执行awstats_configure.pl时输入的站点域名。

wKiom1RHUo3RAos-AAJFMJnsCX0874.jpg

五、配置awstats生成静态页面

    利用awstats的工具将统计的结果生成静态文件:

1
2
shell # mkdir -p /var/www/awstats
shell # /usr/local/awstats/tools/awstats_buildstaticpages.pl -update -config=yourwebsite -lang=cn -dir=/var/www/awstats -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl

    注意:-config=后面的参数是你在执行awstats_configure.pl时输入的站点域名;-dir=是统计结果静态文件的输出目录。

    设置crontab,每天凌晨00:01定时更新静态页面:

1
1 0 * * *  /usr/local/awstats/tools/awstats_buildstaticpages .pl -update -config=yourwebsite -lang=cn - dir = /var/www/awstats  -awstatsprog= /usr/local/awstats/wwwroot/cgi-bin/awstats .pl

    一般站长都不愿随便让人知道自己站的真实流量,所以要把awstats统计结果页面进行密码保护,这里需要用到apache自带的工具htpasswd:

1
2
3
4
5
shell # yum -y install httpd-tools
shell # htpasswd -cd admin.pass admin
New password: 
Re- type  new password: 
Adding password  for  user admin

    把生成的密码文件admin.pass放到nginx主配置目录下(/etc/nginx/)。

    在nginx配置扩展目录(/etc/nginx/conf.d/)下新建awstats.conf配置文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server {
     listen       83;
     server_name  localhost;
     location ~ ^ /awstats/  {      # html 静态页面目录
         root    /var/www ;
         index  index.html;
         access_log off;
         error_log off;
         charset gb2312;
         auth_basic  "admin" ;
         auth_basic_user_file admin.pass;
     }
 
     location ~ ^ /icon/  {         # 图标目录
         root    /usr/local/awstats/wwwroot ;
         index  index.html;
         access_log off;
         error_log off;
     }
 
     location / {
         return  403;
     }
}

最后使nginx重读配置文件,用浏览器查看统计结果 http://yourhostname:83/awstats/awstats.yourwebsite.html

日志分析页面示例:

wKiom1RHSUKylF9SAAWotBFTXts481.jpg


参考资料:

http://baike.baidu.com/view/228748.htm?fr=aladdin

http://www.ibm.com/developerworks/cn/linux/l-cn-awstats-nginx/(有些错误,已在本文中纠正)



本文转自 张斌_青岛 51CTO博客,原文链接:http://blog.51cto.com/qicheng0211/1566682

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
11月前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
844 90
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
1252 3
|
应用服务中间件 nginx
nginx error日志 client intended to send too large body: 1434541 bytes 如何处理?
【8月更文挑战第27天】nginx error日志 client intended to send too large body: 1434541 bytes 如何处理?
1032 6
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
4363 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
9月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
986 54
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
452 9
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
946 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
12月前
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
692 5
图解MySQL【日志】——Redo Log