Awstats处理多apache日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:


作者:田逸([email]sery@163.com[/email])

首发:[url]http://server.it168.com/server/2007-12-04/200712041012131.shtml[/url]
 
linux环境下,开源工具Awstats是一个非常受欢迎的网站日志处理工具。在linux环境安装和配置awstats比较容易成功,但要同时处理多个apache日志(比如web集群的环境),还是有许多工作需要做的。
 
平台环境
1、  服务器3个,2个运行apacheweb 服务器,一个专门处理日志的Awstats服务器。
2、  运行平台:全部为redhat AS 4
 
设计思路
日志处理服务器每天定期从2apache服务器获取日志文件,对取得的压缩文件解压,接着把2个单独的日志文件合并成一个,再用awstats处理生成报告。下面我们就按照这个思路来进行具体的部署。
 
一、Apache日志的生成和处理
 
1、  apache日志生成:
通过修改apache的配置文件 httpd.conf来达到这个目的,下面是某个apache服务器的配置文件关于日志记录的修改部分:
   SetEnvIf Request_URI \.gif image-request
    SetEnvIf Request_URI \.jpg image-request
    SetEnvIf Request_URI \.png image-request
    SetEnvIf Request_URI \.js image-request
    SetEnvIf Request_URI \.css image-request
    SetEnvIf Request_URI \.swf image-request
    ErrorLog /var/log/web/sery.com-error_log
CustomLog "|/opt/apache2/bin/rotatelogs /var/log/web/sery.com-access%Y%m%d.log.%H 28800 480" combined env=!image-request
在这里简单说明一下上面各个项目的意义。SetEnvIf Request_URI设置判断环境变量“image-request,“CustomLog "|/opt/apache2/bin/rotatelogs /var/log/web/sery.com-access%Y%m%d.log.%H 28800 480" combined env=!image-request
”表示不记图片请求所产生的日志,并且使用apache的日志轮转工具rotatelogs对日志进行分割,以年月日及小时方式命名文件,这样用脚本处理日志时就非常方便了。这个CustomLog有点特别,不要把命令前面的”|”等符号写丢了。通过运行apache服务,将在目录/var/log/web/生成日志文件sery.com-access20071120.log.00.
由于使用了日志轮转功能,从上图可以看见2个日志文件。
 
1、  日志备份和压缩:
进入日志所在的目录,把同一天不同时间段的日志合并成一个文件,压缩后移动到另外的一个位置/var/log/weblog-backup为什么要把它放在另外的位置并且压缩呢?主要的原因是为了在传输时节省时间。当然我们不可能每天手动来执行这个操作,自然而言,用shell脚本来干这个事情了。下面给出脚本的内容:
#!/bin/sh
lastlogdate=`date "+%Y%m%d"  -d yesterday`
 
touch /var/log/web/sery.com-access$lastlogdate.log
for i in /var/log/web/sery.com-access$lastlogdate.log.*
do cat $i >> /var/log/web/sery.com-access$lastlogdate.log
rm -f $i
done
 
touch /var/log/web/sery.com-access$lastlogdate.log
gzip /var/log/web/sery.com-access$lastlogdate.log
 
if [[ -f /var/log/web/sery.com-access$lastlogdate.log.gz ]]
  then
  mv /var/log/web/sery.com-access$lastlogdate.log.gz /var/log/weblog-backup/
fi
 
rm -rf `find /var/log/weblog-backup/ -atime 7`
把这个脚本命名为merge_log.sh,放在目录/usr/local/bin下面,并赋予执行权限。然后在自动任务里加入这个任务,让它每天自动执行一次。运行crontab –e 把下面的行加入其中:
   5 0 * * * /usr/local/bin/merge_log.sh
为检查脚本的正确性,至少手动执行一遍脚本merge_log.sh,看是否在目录/var/log/weblog_backup生成压缩文件。如果如愿生成类似 sery.com-access20071119.log.gz这样的文件,表明脚本正确地按照我们的意图工作了。
 
2、  允许awstats取得apache的日志文件:
部署ftp服务,创建一个ftp用户,然后把这个ftp的用户目录定位到“/var/log/weblog-backup”,即第2步生成压缩文件的目录使用下列的命令产生ftp用户和指定目录:
[root@www1 ~]# useradd –d /var/log/weblog-backup  -s  /sbin/nologin sery
[root@www1 ~]# passwd sery
[root@www1 ~]# chmod 755 –R /var/log/weblog-backup
由于vsftpd配置非常容易,这里就不再多说。启用ftp服务,用刚才创建的用户测试一下,看是否可以看见“/var/log/weblog_back”里的文件。
 
到这一步,我们需要在apache服务器上进行的操作就结束了。多个apache服务器,只需要重复上面的操作即可。当然,为了适应你自己的环境,请自行修改相关的目录和文件。
 
一、获取日志文件
awstats服务器从apache服务器取得日志文件,在本案中,我将从2apache服务器取得日志文件。取日志也是每天自动进行一次。有一点必须注意,那就是必须要等“第二步”操作正常结束后再进行取日志;回过头去看“第二步”的“/usr/local/bin/merge_log.sh执行时间在0005分,考虑执行程序的开销,估计1小时左右可以完成这个操作,所以在凌晨2点去取文件是合时的。下面给出取日志的脚本:
# /bin/bash
wget --active-ftp -m --directory-prefix=/root/logs/web1/ --tries=3\ --output-file=/root/script/weblog-get.log\ [url]ftp://sery:heufgewUQc@www1.sery.com/sery[/url]*.gz
 
wget --active-ftp -m --directory-prefix=/root/logs/web2/ --tries=3\
--output-file=/root/script/weblog-get.log \
[url]ftp://sery:[/url] [email]heufgewUQc@www2.sery.com[/email]/sery*.gz
脚本成功运行后,将把第一个apache服务器的日志文件放在”/root/logs/web 1” 目录,第2apache服务器的日志文件放在”/root/logs/web 2” 目录,并且把操作日志记录到文件“/root/script/weblog-get.log,以方便检查脚本执行的状况。把这个脚本放在目录/usr/local/bin下,命名为weblog-get.sh,赋予执行权限,然后手动运行脚本/usr/local/bin/weblog-get.sh,看是否取得了远程apache服务器的2个压缩日志文件。正确无误后,把它加在crontab 里。
crontab –e
00 02 * * * /usr/local/bin/weblog-get.sh
每天凌晨2点,awstats所在的服务器就会主动从2个远程的apache服务器取来日志文件。
 
二、日志合并(awstats服务器上进行)
由于用ftp取得的日志文件有多个(本案是2个),不便于处理,因此很有必要对日志进行解压和合并。处理使用下面的脚本来完成:
#!/bin/bash
 
#define variables
AwsLogDir=/root/logs/awstats_log
Web1Log=/root/logs/web1
Web1OrigLog=$Web1Log/sery.com-access$(date +%Y%m%d --date='1 days ago').log.gz
Web2Log=/root/logs/web2
Web2OrigLog=$Web1Log/sery.com-access$(date +%Y%m%d --date='1 days ago').log.gz
OldFile=/root/logs/awstats_logs/sery.com-access$(date +%Y%m%d --date='4 days ago').log*
 
#########################################################################
#get logfiles
cd $Web1Log
if [[ -f $Web1OrigLog ]]
then
gunzip  -d $Web1OrigLog
fi
 
FileLog1=sery.com-access$(date +%Y%m%d --date='1 days ago').log
if [[ -f $FileLog1 ]]
then
mv sery.com-access$(date +%Y%m%d --date='1 days ago').log  $AwsLogDir/17k.com-access$(date +%Y%m%d --date='1 days ago').log.1
fi
 
cd $Web2Log
if [[ -f $Web2OrigLog ]]
then
gunzip  -d $Web2OrigLog
fi
 
FileLog2=sery.com-access$(date +%Y%m%d --date='1 days ago').log
if [[ -f $FileLog2 ]]
then
mv sery.com-access$(date +%Y%m%d --date='1 days ago').log  $AwsLogDir/sery.com-access$(date +%Y%m%d --date='1 days ago').log.2
fi
 
#########################################################################
# conbine two web logs to one
cd $AwsLogDir
File1Log=sery.com-access$(date +%Y%m%d --date='1 days ago').log.1
File2Log=sery.com-access$(date +%Y%m%d --date='1 days ago').log.2
 
if [[ -f $File1Log && -f $File2Log ]]
then
  cat $File1Log $File2Log >sery.com-access.log 
fi
 
if [[ -f $OldFile ]]
then
rm $OldFile
fi
上述脚本正常运行后,将在/root/logs/awstats目录生成文件sery.com-access.log,这个文件正是awstats所需要的。如果从更多apache服务器取来更多日志文件,上述脚本需要更改才能简洁高效。方法是用循环方式生成那个sery.com-access.log文件。
 
三、配置awstats系统
1、    安装awstats
(1)    下载awstats 
wget [url]http://downloads.sourceforge.net/awstats/awstats-6.7.tar.gz?modtime=1183813789&[/url]
big_mirror=0
(2)    解压
tar  xvf  wstats-6.7.tar.gz
mv awstats-6.7  /usr/local/awstats
awstats需要apache协同工作,请自行安装之。Apache安装好以后,运行命令/usr/local/apache/bin/httpd –l | grep mod_cgi.c 看是否把模块编译进来,这个模块是必须的。接着再检查perl工具是否被安装到系统,如果没有安装,请手动安装。
 
2、  配置awstats
cd /usr/local/awstats/tools
执行配置脚本,这是一个交互程序,可根据自己的实际情况回答
perl awstats_configure.pl
----- AWStats awstats_configure 1.0 (build 1.7) (c) Laurent Destailleur -----
This tool will help you to configure AWStats to analyze statistics for
one web server. You can try to use it to let it do all that is possible
in AWStats setup, however following the step by step manual setup
documentation (docs/index.html) is often a better idea. Above all if:
- You are not an administrator user,
- You want to analyze downloaded log files without web server,
- You want to analyze mail or ftp log files instead of web log files,
- You need to analyze load balanced servers log files,
- You want to 'understand' all possible ways to use AWStats...
Read the AWStats documentation (docs/index.html).
 
-----> Running OS detected: Linux, BSD or Unix
 
-----> Check for web server install
  Found Web server Apache config file '/usr/local/apache2/conf/httpd.conf'
 
-----> Check and complete web server config file '/usr/local/apache2/conf/httpd.conf'
 
-----> 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] ?
执行完配置后,将生成配置文件/etc/aswstats/ awstats.sery.conf,修改
LogFile=/root/logs/awstats_log/17k.com-access.log
然后再执行 perl /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=sery.com –update 如果没有错误的话,在浏览器输入awstats服务器的ip地址即可得到访问日志报告。我们不想无关的人看见日志报告,用apache用户验证功能来完成,把下面的内容加入到apache配置文件httpd.conf即可:
         Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"
Alias /awstatscss "/usr/local/awstats/wwwroot/css/"
Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"
ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"
 
<Directory "/usr/local/awstats/wwwroot/cgi-bin/">
    AuthType Basic
    Options ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all
    AuthName "17k awstats Access"
    AuthUserFile /usr/local/awstats/.htpasswd
    Require valid-user
</Directory>
awstats更新加入 crontab,让它每天自动执行一次。
crontab –e
00 06 * * * /usr/local/bin/awstats_update.sh
脚本/usr/local/bin/awstats_update的内容:
#!/bin/bash
perl /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=sery.com -update >> /usr/local/awstats/awstats_update.log
每天早上6点会自动执行一次更新操作,对日志文件进行处理,最后在浏览器里读出所需数据。
输入正确的用户名和密码
 





















本文转自sery51CTO博客,原文链接:http://blog.51cto.com/sery/53672  ,如需转载请自行联系原作者

 
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
52 1
|
22天前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
|
8天前
|
存储 监控 安全
实时记录和查看Apache 日志
Apache 是一个开源、跨平台的Web服务器,保护其安全依赖于监控活动和分析访问日志。日志分为访问日志和错误日志,前者记录用户请求及响应情况,后者记录服务器错误信息。EventLog Analyzer等工具可集中收集、分析日志,提供直观的仪表板和实时警报,帮助识别趋势、异常和威胁,确保服务器稳定性和安全性,并支持合规管理。
|
5月前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
5月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
5月前
|
存储 Ubuntu Apache
如何在 Ubuntu VPS 上配置 Apache 的日志记录和日志轮转
如何在 Ubuntu VPS 上配置 Apache 的日志记录和日志轮转
60 6
|
5月前
|
消息中间件 Java Kafka
【Azure 事件中心】开启 Apache Flink 制造者 Producer 示例代码中的日志输出 (连接 Azure Event Hub Kafka 终结点)
【Azure 事件中心】开启 Apache Flink 制造者 Producer 示例代码中的日志输出 (连接 Azure Event Hub Kafka 终结点)
|
21天前
|
存储 人工智能 大数据
The Past, Present and Future of Apache Flink
本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024 上海站主论坛开场的分享,今年正值 Flink 开源项目诞生的第 10 周年,借此时机,王峰回顾了 Flink 在过去 10 年的发展历程以及 Flink社区当前最新的技术成果,最后展望下一个十年 Flink 路向何方。
309 33
The Past, Present and Future of Apache Flink
|
3月前
|
SQL Java API
Apache Flink 2.0-preview released
Apache Flink 社区正积极筹备 Flink 2.0 的发布,这是自 Flink 1.0 发布以来的首个重大更新。Flink 2.0 将引入多项激动人心的功能和改进,包括存算分离状态管理、物化表、批作业自适应执行等,同时也包含了一些不兼容的变更。目前提供的预览版旨在让用户提前尝试新功能并收集反馈,但不建议在生产环境中使用。
878 13
Apache Flink 2.0-preview released
|
3月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
107 3

热门文章

最新文章

推荐镜像

更多