如何合并Apache/Lighttpd/Nginx服务器日志文件

时间:2020-01-09 10:46:01  来源:igfitidea点击:

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"