日志滚动时...

作者:Gaelyne R. Gasson

作为一家网络托管公司,有时我们需要非常迅速地了解我们的 Apache 网络服务器在任何给定时间向外部世界提供的内容——并且要尽可能快地看到这一点。

正如系统管理员需要能够监控系统日志文件一样,Web 管理员也应该能够对 Web 日志执行相同的操作。注意到许多实用程序可以实时显示系统日志信息,我确信会有类似的程序来监控 Web 日志。在 Freshmeat.net 和其他在线资源中搜索后,我没有找到任何完全满足我需求的程序。有几个程序很接近,但大多数程序只能监控一个文件,而少数可以监控多个文件的程序会让我迷失在试图浏览我监视的大约 30 个日志的选项卡中。

我找到的解决方案不是一个程序,而是在 Apache 的 httpd.conf 文件中进行一些更改后,我发现我可以拥有一个专门的一次性日志文件,其中仅包含我需要的信息,用于我们的所有 Web 主机。然后,在我们的工作室的外部显示器上使用 colortail(带有其他配置设置)显示“一次性”监控日志。我可以一目了然地看到我们的哪些主机当前有 Web 活动、流量来自哪里以及正在访问的页面。这也使我们能够快速处理诸如脚本小子和恶意搜索引擎机器人等问题。该系统对我们来说效果非常好,因此我们也将系统日志记录添加到其中。

httpd.conf 更改

除了用于常规日志记录的 LogFormat 之外,我还添加了一个标记为“webmonitor”的新格式

LogFormat "[%v] %h %u \"%r\"%>s%b\n\"%{Referrer}i\" \"%{User-Agent}i\"%t" webmonitor

这会在第二行显示带有 Referrer 和 User-Agent 的日志信息,使其更易于阅读。日志文件可以是任何格式——甚至是我们用于标准日志记录的“common”格式。我决定更改它以提高清晰度,并且因为 Apache 足够灵活以允许这样做。

由于图形文件(如 GIF、JPEG 或 PNG 文件)可能会使显示内容变得杂乱,因此我通过在 httpd.conf 中的常规日志部分添加以下三行来排除它们

SetEnvIf Request_URI \.gif$ unwanted
SetEnvIf Request_URI \.jpg$ unwanted
SetEnvIf Request_URI \.png$ unwanted

我们使用基于名称的虚拟主机,并且每个主机都有自己的 <VirtualHost></VirtualHost> 容器。除了它们的永久日志文件之外,我们还为我们的每个主机添加了一个额外的 CustomLog 命令,用于我们的 webmonitor 文件。例如

<VirtualHost someisp.com>
...
CustomLog /var/log/httpd/someisp.com-access_log combined
CustomLog /var/log/httpd/webmonitor_log webmonitor env=!unwanted
...
</VirtualHost>
我们的添加是
CustomLog /var/log/httpd/webmonitor_log webmonitor env=!unwanted
/var/log/httpd/webmonitor_log 是我们的监控日志文件的路径和文件名,如果它尚不存在,Apache 会在启动时为我们创建它。webmonitor 是我们在上面的 LogFormat 部分中定义的自定义格式日志的名称。env=!unwanted 设置 Apache,使其不记录我们在 SetEnvIf 行中列出的任何项目(.gif、.jpg 和 .png 文件扩展名)。这样我们就看不到图形文件请求,但可以看到所有其他请求。
添加系统日志信息

在外部显示器上查看服务器上正在发生的事情的能力被证明非常有用,因此我们还在同一文件中包含了系统日志记录信息。为此,我们编辑了 /etc/tem syslog.conf 以包含以下命令

kern.*;authpriv.*;*.crit;*.error;*.warning;*.emerg /var/log/httpd/webmonitor_log
Colortail

Colortail 由 Joakim Andersson (pt98jan@student.hk-r.se) 编写,可从 www.student.hk-r.se/~pt98jan/colortail.html 获取,并根据 GNU 通用公共许可证发布。

虽然我们可以简单地 tail webmonitor 日志文件,但在显示中添加颜色是一个不错的点缀,即使我们碰巧在工作室的另一边,也可以指示哪个 Web 主机正在进行活动。

Colortail 附带了几个示例配置文件;虽然 conf.xferlog 接近,但没有一个真正适合 Web 日志。经过一些调整,这就是我们一直在使用的格式。它是一个混合格式,因为它既包含 Web 相关项目,又包含系统日志相关项目。

列表 1. colortail.conf

显示 Colortail

要在本地使用 colortail,您可以使用如下命令

colortail -f -k /etc/colortail /var/log/httpd/
 <@cont_arrow><\#229><@$p>webmonitor_log &

这很好,但它不允许我们始终将其显示在屏幕上,而且我经常需要切换到显示日志的特定控制台或 X 窗口。

为了能够更好地监控活动,我们在连接到系统的 Commodore 128D 计算机上显示 colortail 输出。我们特定的设置是将我们的 C128 通过零调制解调器和 PPP 连接连接到专用服务器。从这里,我们登录到具有日志文件的服务器。您可以使用任何手头闲置的廉价备用计算机来实现此目的,只要它能够处理 ANSI 或 VT100 仿真并具有 80 列显示即可。PPP 不是必需的。

我们没有在 Commodore 机器上键入启动 colortail 的命令,而是使用每晚的 cron 程序来轮换日志文件,然后将 colortail 输出发送到 PTY 设备。请参阅列表 2,了解用于此目的的文件。

列表 2. Cron 程序

总结

监控日志文件的方法可能与 Linux 用户一样多,但这也是乐趣的一部分。虽然使用 colortail 显示日志文件实际上没有什么“新”的,但这与我读到的资源组合不同,并且它满足了我的需求。希望本文能够帮助其他正在寻找查看实时 Web 活动的方法的人。

As the Log Scrolls By...
Gaelyne R. Gasson (gaelyne@videocam.net.au) 是南澳大利亚州的网络管理员。使用上面描述的 Web 监控方法,她可以一目了然地判断是否有人正在观看她的网络摄像头 (http://gaelyne.com/webcam/)。
加载 Disqus 评论