如何合并Apache/Lighttpd/Nginx服务器日志文件
Apache Web服务器群集位于nginx负载均衡器之后。
如何合并后端Apache Web服务器日志文件以用于统计目的。
我该如何像使用cron作业的操作系统那样仅在Linux/UNIX下使用Web服务器日志文件?
您需要使用AWStats软件包中的logresolvemerge Perl脚本。
logresolvemerge允许您从特定来源获取一个按日期排序的唯一输出日志文件:
- 充当任何其他日志分析器的日志合并。
- 它可以读取多个输入日志文件。
- 它可以读取.gz/.bz2日志文件。
- 它还可以进行快速反向DNS查找来替换;将所有IP地址都转换为主机名,并生成日志文件。
步骤1:安装awstats
从Fedora项目中打开EPEL仓库,并使用yum命令install awstats软件包,执行:
# yum -y install awstats
请注意,基于perl的日志合并脚本安装在/usr/share/awstats/tools/logresolvemerge.pl中。
步骤2:从所有其他服务器/节点获取日志
我们的示例设置如下:
+----------+ | apache1 + 192.168.1.10 +-----+----+ | +-----+----+ | apache2 + 192.168.1.11 +-----+----+ | +-----+----+ | apache3 + 192.168.1.12 +-----+----+ | ------------+----------+---------------------------- | | | LAN ------+ +-------+ +-------------+ Nginx | |mysql1 | | cachingnode | lb1 | |cluster| | / stats | 192.168.1.20 ------+ +-------+ +-------------+ 192.54.1.1
其中:
- 您需要从apache1,apache2和apache3节点获取日志。
- 您将使用缓存节点来构建统计信息。
首先,创建一个目录来存储日志。
在cachingnode(192.168.1.20)上执行以下命令
# D=/var/logs/clusterlogs # mkdir -p $D # mkdir -p $D/raw # mkdir -p $D/raw/apache{1,2,3} # mkdir -p $D/reports
使用rsync命令从每个服务器获取日志文件:
# rsync -azv user@apache1:/var/logs/httpd/access_logs* $D/raw/apache1 # rsync -azv user@apache2:/var/logs/httpd/access_logs* $D/raw/apache2 # rsync -azv user@apache3:/var/logs/httpd/access_logs* $D/raw/apache3
步骤3:合并日志文件
如下使用logresolvemerge.pl合并所有日志文件,执行:
# /usr/share/awstats/tools/logresolvemerge.pl $D/raw/apache1/access_logs* $D/raw/apache2/access_logs* \ $D/raw/apache3/access_logs* > $D/raw/merged_access_logs
上面的代码将创建一个名为$D/raw/merged_access_logs的新文件。
您需要使用此文件来创建日志。
您可以删除所有文件的其余部分:
# rm -f $D/raw/apache1/access_logs* # rm -f $D/raw/apache2/access_logs* # rm -f $D/raw/apache3/access_logs*
步骤4:如何使用Webalizer生成图形?
Webalizer是一个快速,免费的Web服务器日志文件分析程序。
请参阅如何安装Webalizer。
您需要创建webalizer配置文件,执行:
# mkdir -p $D/reports/webalizer # cp /etc/webalizer.conf.sample $D/reports/webalizer/webalizer.conf
编辑配置文件,执行:
# vi $D/reports/webalizer/webalizer.conf
如下更新:
LogFile /var/logs/clusterlogs/raw/merged_access_logs OutputDir /var/www/usage HistoryName /var/logs/clusterlogs/raw/webalizer.hist Incremental yes IncrementalName /var/logs/clusterlogs/raw/webalizer.current HostName theitroad.local
保存并关闭文件。
要生成统计信息,请执行:
# webalizer -c $D/reports/webalizer/webalizer.conf
您的报告将生成并存储在/var/www/usage目录中。
您可以使用在cachingnode(http://cachingnode/usage /)上运行的apache服务器访问/var/www/usage。
步骤5:如何使用AWStats生成图?
AWStats是一个免费的功能强大的工具,可以图形方式生成高级的Web,流,FTP或者邮件服务器统计信息。
该日志分析器可以作为CGI或者从命令行使用。
了解如何在Linux下安装AWStats。
安装完成后,编辑awstats配置文件,执行:
# vi /etc/awstats/awstats.theitroad.local.conf
更新配置指令,如下所示:
LogFile="/var/logs/clusterlogs/raw/merged_access_logs" LogFormat=1 SiteDomain="theitroad.local" DirData="/var/www/usage/awstats"
保存并关闭文件。
在shell提示符下执行以下命令以生成统计信息,然后执行:
# /usr/share/awstats/wwwroot/cgi-bin/awstats.pl -update -config=theitroad.local
Cron Job:获取日志文件并生成统计信息
使用cron作业如下创建shell脚本:
# vi /etc/cron.daily/fetchapachelogs.sh
追加代码:
#!/bin/bash # Author: <[email protected]>, under GPL v2.0+ # ------------------------------------------------------------------- D="/var/logs/clusterlogs" # user1@remote1:/path/to/log user2@remote2:/path/to/log _nodes='user@apache1:/var/logs/httpd/access_logs* user@apache2:/var/logs/httpd/access_logs* user@apache3:/var/logs/httpd/access_logs*' # Set full path with args _rsync="/usr/bin/rsync -az " _mkdir="/bin/mkdir" _rm="/bin/rm" _webalizer="/usr/bin/awstats" _awstats="/usr/share/awstats/wwwroot/cgi-bin/awstats.pl" _merge="/usr/share/awstats/tools/logresolvemerge.pl" # log files and dirs _mergedlog="$D/raw/merged_access_logs" _path="" # Build path and fetch log files [ ! -d "$D/raw" ] && $_mkdir -p "$D/raw" for f in $_nodes do IFS=':' set -- $f n="$D/raw/${1##*@}" [ ! -d "$n" ] && $_mkdir -p "$n" # grab the log file $_rsync "$f" "$n" _path="$_path $n/* " done # Merge it $_merge "$_path" >"$_mergedlog" # Generate webalizer stats [ -f $D/reports/webalizer/webalizer.conf ] && $_webalizer -c $D/reports/webalizer/webalizer.conf &>/dev/null # Generate Awstats too # [ -x $_awstats ] && $_awstats -update -config=theitroad.local # Add your other stats commands here ## /path/to/my_stats_app -f "$D/reports/webalizer/webalizer.conf" # Add your other stats commands here # Clean up $_rm -f "$_mergedlog" $_rm -f "$_path"