如何查看每个 Apache 虚拟主机使用了多少带宽?

pka*_*ing 25 bandwidth monitoring virtualhost apache-2.2

我设置了 Apache 来为多个虚拟主机提供服务,我想看看每个站点使用了多少带宽。我可以看到整个服务器使用了多少,但我想要更详细的报告。

我发现的大多数事情都是为了限制虚拟主机的带宽,但我不想这样做;我只想看看哪些网站使用了多少带宽。

这不是为了计费目的,只是为了提供信息。

是否有我应该使用的 apache 模块?或者有其他方法可以做到这一点?

Xer*_*xes 24

您想要的信息都在日志​​中,因此您应该查看日志分析器,例如AWStats。另一种选择是使用 Google Analytics。

为了分析日志,这里有一个粗略的例子,你可以用它来告诉你一个日志文件从命令行报告了多少 MB 的流量:

cat /var/log/apache/access.log | awk '{SUM+=$10}END{print SUM/1024/1024}'
Run Code Online (Sandbox Code Playgroud)

  • 无用的使用 cat: awk '...' /var/log/apache/access.log 也可以工作 (5认同)
  • 是的。但是请注意不要意外总结响应代码。我意识到我的计数太低了,因为对我来说 10 美元是 http 响应代码。对于我的 apache 自定义日志,我需要使用 {SUM+=$11} 代替。 (2认同)

Oct*_*Oct 5

我建议您使用精彩的 apache 日志记录机制及其鲜为人知的%I%O标志:

定义格式:

LogFormat "%t %a %v %U%q %I %O" IOFormat

在您的主httpd.conf中使用它:

CustomLog /var/log/apache2/all-bw.log IOFormat

这些值可能没有考虑所有标头信息,但对于精确了解 VirtualHost 流量来说非常准确。

使用 perl 脚本扫描日志,每 n 分钟(例如 5 分钟)聚合每个虚拟主机,并将其发送到 cacti。

这些标志由 mod_logio 提供,它可能内置在您的 Apache 中(就像我的 Debian 的 Apache 一样)。

  • 嗯,也如 Apache 2.0 文档中所引用的:请注意,在 httpd 2.0 中,与 1.3 不同,%b 和 %B 格式字符串并不表示发送到客户端的字节数,而只是表示 HTTP 响应的字节大小(例如,如果连接中止或使用 SSL,则情况会有所不同)。mod_logio 提供的 %O 格式将记录通过网络发送的实际字节数。 (2认同)