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


24

我已经设置了Apache服务多个虚拟主机,并且我想看看每个站点使用多少带宽。我可以看到整个服务器使用了多少,但我想获得更详细的报告。

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

这不是出于计费目的,仅是为了提供信息。

我应该使用一个Apache模块吗?还是有其他方法可以做到这一点?

Answers:


23

您所需要的信息全部在日志中,因此您应该查看日志分析器,例如AWStats。另一种选择是使用Google Analytics(分析)。

为了分析日志,这是一个粗略的示例,您可以使用该示例来告诉您日志文件从命令行报告多少MB流量:

cat /var/log/apache/access.log | awk '{SUM+=$10}END{print SUM/1024/1024}'

5
猫的无用使用:awk'...'/var
log/apache/access.log

建议的方式会计算从某些网页发送到Internet的流量(出站流量)吗?
哈立德

2
是。但是请注意不要意外地汇总响应代码。我意识到自己的计数太低了,因为对我来说,$ 10是http响应代码。对于我的Apache自定义日志,我需要改用{SUM + = $ 11}。
Phil 2015年


3

我建议您使用出色的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提供,mod_logio可能内置在您的Apache中(就像我的Debian的Apache一样)。


2
嗡嗡声,也可以在Apache 2.0文档中引用:注意,在httpd 2.0中,与1.3不同,%b和%B格式字符串不代表发送给客户端的字节数,而只是代表HTTP响应的字节数(例如,如果连接中止或使用SSL,则这将有所不同。mod_logio提供的%O格式将记录通过网络发送的实际字节数。
10

2

如果您决定将awstats与Apache一起使用,则开箱即用它将显示整个服务器的聚合带宽。

要查看每个虚拟主机的带宽,建议安装vlogger

Vlogger实际上将在单独的目录/文件中收集您为此设置的每个虚拟主机的Apache访问日志信息。

例如,如果您的Apache日志文件位于/ var / log / apache2中,则典型的vlogger安装将为您的虚拟主机(例如vhost1.com vhost2.com)创建以下内容:

/var/log/apache2/vhost1.com/access.log
/var/log/apache2/vhost2.com/access.log

Vlogger为您提供了轮换这些日志的选项,提供了一种更改访问日志文件的命名模板(例如,添加日期)的方法,并声称它处理的日志文件比Apache更好。

不利的一面是,您将不再具有聚合的服务器视图(您将需要分别聚合日志,或者可能需要使用额外的Apache设置或其他方法?)。

我会提醒您不要使用Google Analytics(分析)(或任何基于JavaScript的跟踪)来监控服务器带宽,因为您依赖客户端通过javascript报告。Google Analytics(分析)不会向您报告禁用了javascript的人以及所有抓取工具/蜘蛛/机器人。


1

这是一些正则表达式,用于解析Xerxes提出的日志格式。

\ [([0-9] +)/(\ w +)/([0-9] {4})[^ \]] + \] \ s(\ d {1,3}。\ d {1, 3}。\ d {1,3}。\ d {1,3})\ s([^ /] +)[^ \ s] + \ s(\ d +)\ s(\ d +)

日志示例:

[2011年1月12日:14:25:04 +0000] 157.157.12.206 files.hjaltijakobsson.com / 581669 [2011年1月12日:14:25:04 +0000] 157.157.12.206 files.hjaltijakobsson.com / 624 747 [12 / Jan / 2011:14:25:04 +0000] 157.157.12.206 files.hjaltijakobsson.com /icons/blank.gif 687186 [12 / Jan / 2011:14:25:04 +0000] 157.157。 12.206 files.hjaltijakobsson.com /icons/compressed.gif 693188 [12 / Jan / 2011:14:25:04 +0000] 157.157.12.206 files.hjaltijakobsson.com /favicon.ico 592512

火柴:

子模式1(每月的一天):12子
模式2(缩写为月份):一月子
模式3(年):2011子
模式4(访问者主机):157.157.12.206子
模式5(虚拟主机):files.hjaltijakobsson.com子
模式6(传入字节):581子
模式7(传出字节):669

干杯。


1

假设服务器上实际上有多个虚拟主机(因此有多个site.com.access_log),请稍稍调整可接受的答案。这将排序并列出每个虚拟主机

for f in *.access_log ; do echo `awk '{SUM+=$10}END{print SUM/1024/1024}' $f` $f ; done | sort -rn | more

以及用于gzip压缩日志的目录

for f in *.access_log.*.gz ; do echo `zcat $f|awk '{SUM+=$10}END{print SUM/1024/1024}'` $f `stat -c%z $f`; done | sort -rn | more 

0

嗯,使用IPTables和字符串匹配来记录数据包以供以后报告可能会变得很邪恶。但是仅适用于非SSL连接。

或诸如Snort之类的协议和会话感知功能可能会被使用...


0

正确。筛选日志是一个好主意。下载文件时,我还想获得Apache服务器的带宽。

LogFormat "%h %l %t %u \"%r\" %>s %b/%D**" combined

计算%b%d输出,这将为您提供电流带宽。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.