如何检测每个VHOSTS传入的httpd连接计数?

如何检测每个VHOSTS传入的httpd连接计数?

使用 RHEL 和 Apache (httpd),有没有办法:

  • 检测哪个 v.host(域)正在获得多少传入连接?

因为在这几天里,我在服务器上收到了很多传入连接,并通过以下方式进行了确认:

  • ps aux | grep httpd -c

    第734章

这意味着我734当前有 Apache 处理传入连接,但问题是我有(比方说)10 个 Vhost(域)。

  • 那么哪个域的负载较高呢?

答案1

我将修改访问日志格式以在日志中包含主机字符串。那么排序和计数就很简单了vhost。这些是apache我使用的配置谎言。

# Modified log format with virtual host, execution time, and query params
LogFormat "%v:%p %a %T %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" local

# Define an access log for VirtualHosts that don't define their own logfile
CustomLog /var/log/apache2/access.log local

这可以使用如下命令来计算:

cut -d\t -f1 access.log | sort | uniq -c

或者您可以使用awk(允许按一天中的时间和/或其他数据进行选择):

awk '{print $1}' access.log | sort | uniq -c

或者为每个虚拟主机使用单独的访问日志。对活动访问日志进行简单的字数统计就可以回答您的问题。

要检查当前活动,请启用 mod-status 插件并使用 URL 获取状态http://127.0.0.1/server-status。输出将包括每个槽处理的最后一个 URL 及其当前状态。该信息可用于确定当前状态。使用 URL 的输出http://127.0.0.1/server-status?notable可能更容易解析。

该命令w3m -dump http://127.0.0.1/server-status?notable提供了一个很好的文本转储。然而,命令wgetcurl通常用于此类查询。

相关内容