我如何才能知道我的服务器上哪个站点的流量过大?

我如何才能知道我的服务器上哪个站点的流量过大?

我正在运行一个 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

相关内容