我有三到四台 Linux 服务器,每台服务器托管 5 到 50 个域。每个域都有自己的文件夹:
/www/项目名称/web/
日志进入:
/www/项目名称/log
但是,如果出现流量高峰(或者,正如我所看到的,内存使用量高峰),我不确定如何找出哪个域负责流量,而无需在每个项目上运行 tail -f 并根据滚动速度做出有根据的猜测。
一定有更好的方法!可能有,但我没见过。上次我检查时,带宽监视器只报告系统范围的负载。
因此,如果有人知道如何正确地做到这一点,请告诉我。
谢谢!
编辑:我的目标是提供即时反馈。我知道我可以配置 Apache 来记录发送和接收的字节数,但如果我的服务器受到重击,而我试图找出所有流量来自哪个域,那么这并不一定会有帮助。
答案1
您还可以启用 Apache 状态页面并将其限制为您的 IP,然后查找请求页面的趋势。
示例输出:http://www.apache.org/server-status
配置:
<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from <your IP>
</Location>
答案2
您可以使用 apachetop:
apachetop -f /www/projectname/log/access_log
它为您提供指定日志的 BW 进出统计信息。
答案3
查看 mod_cband 插件。如果您将插件添加到每个域的配置文件中,则可以为每个虚拟域提供实时流量水平。只需对每个域使用相同的记分板。/cband-status 页面将为您提供每个域的当前流量水平统计信息。
答案4
当您使用虚拟主机(一个 IP 地址上有多个域名)时,您只能通过解析 Apache 日志文件来测量流量。只有 Apache 知道请求是发给哪个主机的,因为这就是虚拟主机的工作方式。
在这种情况下,您可以为每个虚拟主机添加不同的 CustomLog 行,例如:
CustomLog ${APACHE_LOG_DIR}/host.domain.net.log 合并
然后,您可以使用“webalizer”等日志处理软件来处理日志,将每个响应的字节数相加,并得出该域的流量近似值。
这是一个近似值,因为它不包括要求是通信的一部分,不包括开销。
但是,如果您只是想看看哪个站点受到了攻击,您可能应该只启用对 /server-status 页面的访问,它将向您显示所有当前/最近的活动来自哪里。
如果您确实想要精确的字节数,唯一的办法是使用基于 IP 的虚拟主机,并使用软件计算每个 IP 地址的实际流量字节数。在这种情况下,我发现最好的软件是 pmacctd“混杂模式记账守护程序”,它可以很好地完成每个 IP 的流量记账。
问候,安德鲁·麦克米兰。