如何合并 Apache / Lighttpd / Nginx 服务器日志文件
您需要使用AWStats包中的 logresolvemerge Perl 脚本。logresolvemerge 允许您获取一个唯一的输出日志文件,按日期排序,从特定来源构建:
- 充当任何其他日志分析器的日志合并器。
- 它可以读取多个输入日志文件。
- 该命令可以读取.gz/.bz2压缩日志文件。
- 它还可以进行快速反向 DNS 查找,将所有 IP 地址替换为结果日志文件中的主机名。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 是的 |
要求 | Linux 或 Unix 终端 |
类别 | Web 服务器 |
操作系统兼容性 | AIX • Alma • Alpine • Amazon Linux • Arch • BSD • CentOS • Debian • Fedora • FreeBSD • HP-UX • Linux • macOS • Mint • NetBSD • OpenBSD • openSUSE • Pop!_OS • RHEL • Rocky • Stream • SUSE • Ubuntu • Unix • WSL |
预计阅读时间 | 4 分钟 |
步骤#1:安装awstats
默认情况下,您的系统上可能未安装awstats命令。因此,请使用Alpine Linux 上的apk 命令、 RHEL 等上的dnf 命令/ yum 命令、Debian、Ubuntu 等上的apt 命令/ apt-get 命令、SUSE/OpenSUSE 上的 zypper 命令、Arch Linux 上的 pacman 命令来安装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 ------+ +-------+ +-------------+ 202.54.1.1
在哪里,
- 您需要从 apache1、apache2 和 apache3 节点获取日志。
- 您将使用缓存节点来构建统计数据。
首先创建一个目录来存储日志,在cachingnode(192.168.1.20)上输入以下命令,
使用rsync命令从各个服务器获取日志文件:
# D=/var/logs/clusterlogs
# use mkdir command to make dirs for each box #
# mkdir -p $D
# mkdir -p $D/raw
# mkdir -pv $D/raw/apache{1,2,3}
# mkdir -p $D/reports
# 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 合并所有日志文件,如下所示:
以上将创建一个名为 $D/raw/merged_access_logs 的新文件。您需要使用此文件来创建日志。您可以删除其余所有文件以释放磁盘空间。您可以使用Linux 上的df 命令或 du 命令检查可用磁盘空间,如下所示:
使用 rm 命令在 Linux 下移除或删除这些日志文件。例如:
# /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
# df -H
# du -csh
# 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
# copy file using the cp command #
# 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 example.com
# webalizer -c $D/reports/webalizer/webalizer.conf
您的报告将生成并存储在 /var/www/usage 目录中。您可以使用在 cachingnode 上运行的 apache 服务器(http://cachingnode/usage/)访问 /var/www/usage。
步骤#5:如何使用AWStats生成图表?
AWStats 是一款免费的强大工具,可以图形方式生成高级 Web、流媒体、FTP 或邮件服务器统计信息。此日志分析器可作为 CGI 或命令行使用。了解如何在 Linux 下安装 AWStats。安装后,编辑 awstats 配置文件,输入:
# vi /etc/awstats/awstats.example.com.conf
更新配置指令如下:
LogFile="/var/logs/clusterlogs/raw/merged_access_logs" LogFormat=1 SiteDomain="example.com" DirData="/var/www/usage/awstats"
保存并关闭文件。在 shell 提示符下键入以下命令来生成统计数据,输入:
# /usr/share/awstats/wwwroot/cgi-bin/awstats.pl -update -config=example.com
Cron Job:获取日志文件并生成统计数据
使用 cron 作业创建如下 shell 脚本:
# vi /etc/cron.daily/fetchapachelogs-sh
附加代码:
#!/bin/bash # Author: Vivek Gite <vivek@example.com>, 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=example.com # 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"
- CentOS / Redhat Linux:安装 Keepalived 为 Web 集群提供 IP 故障转移
- CentOS / Redhat:安装 nginx 作为反向代理负载均衡器
- 使用 KeepAlived 处理 nginx 故障转移
- nginx:设置 SSL 反向代理(负载平衡 SSL 代理)
- mod_extforward:Lighttpsd 记录客户端在反向代理/负载均衡器后面的真实 IP
- 如何合并 Apache / Lighttpsd / Nginx 服务器日志文件
- Linux nginx:Chroot(Jail)设置
- 操作方法:SPDY SSL 安装和配置
- 在 CentOS/RHEL 上使用 Yum 命令安装 Nginx
- 在 Nginx 上创建自签名 SSL 证书