我正在运行一个 Linux 服务器,上面有大约 60 个网站,在负载过重的情况下崩溃了。有没有简单的方法可以查看哪个 Apache 虚拟主机的流量最多?
答案1
确保您已mod_status.so
加载 apache 模块,然后查找/将上述内容添加到您的 httpd.conf:
# Uncomment the following lines to enable mod_status support:
#
ExtendedStatus On
<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from YOUR_IP_HERE
</Location>
这将允许您查看 http 服务器中正在使用的加载域的所有页面。
要访问它,请使用http://your_ip/服务器状态并且只有在定义的ipAllow from YOUR_IP_HERE
才可以查看它。
除此之外,我会像推荐的那样使用 netstat、服务器日志和mod_backdoor(用于从因病无法正常响应的 Apache 获取信息)。
摘自 mod_backdoor.txt
要编译/安装mod_backdoor,请执行以下操作:
# apxs -c mod_backdoor.c
# apxs -i mod_backdoor.la
要启用 mod_backdoor,请在您的 conf 文件中添加以下内容:
loadmodule backdoor_module modules/mod_backdoor.so
<IfModule mod_backdoor.c>
BackdoorAddress 127.0.0.1:65535
</IfModule>
尽管下面的控件与上面显示的 BackdoorAddress 是重复的,但它可能作为示例很有用。您可以为 BackdoorAddress 指定 0.0.0.0:port,然后使用 mod_access 指令来控制哪些客户端可以使用后门。
<VirtualHost 127.0.0.1:65535>
<location />
order deny,allow
allow from 127.0.0.1
deny from all
</location>
</VirtualHost>
答案2
我取得了一些不错的成果wtop/logrep过去,一个盒子上只有一个网站。我认为它没有理由不能扩展到多个网站,并且支持可以过滤的 URL 字段。
答案3
补充 MikeR 的回答推荐wtop/logrep,您可以获得每个域名的请求数(请求数最多的 15 个域名):
logrep -o 'count(*),domain' -s 15:1:d access.log
您还可以使用logrep
模式tail
,这对于简化数据并使模式更容易发现非常有用:
logrep -m tail -o 'msec,method,status,domain,refdom,uas' access.log
如果以上内容看起来可能有帮助,那么也请查看“课程”。
答案4
使用类似以下内容来解析 apache 访问日志:http://awstats.sourceforge.net/
或者使用ngrep
:
sudo ngrep -qp 'GET|POST' port 80