How can I see how much bandwidth each Apache Virtual Host is using?
I have Apache set up to serve several Virtual Hosts, and I would like to see how much bandwidth each site uses. I can see how much the entire server uses, but I would like more detailed reports.
Most of the things I have found out there are for limiting bandwidth to virtual hosts, but I don't want to do that; I just want to see which sites are using how much bandwidth.
This isn't for billing purposes, just for information.
Is there an apache module I should use? Or is there some other way to do this?
Solution 1:
The information you're after is all in the logs, so you should look at a log analyzer such as AWStats. The other option is to use Google Analytics.
For analyzing the logs, here's a rough example which you can use to tell you how many MB of traffic a log file reports from the command line:
cat /var/log/apache/access.log | awk '{SUM+=$10}END{print SUM/1024/1024}'
Solution 2:
I suggest you use the wonderful apache logging mechanism and its less known %I and %O flags:
Define the format:
LogFormat "%t %a %v %U%q %I %O" IOFormat
Use it in your main httpd.conf:
CustomLog /var/log/apache2/all-bw.log IOFormat
The values are probably not accounting all headers information, but are quite accurate to have a precise idea of VirtualHost traffic.
Scan the logs with a perl script to aggregate per virtual host every n minutes (5 for example) and send this to cacti.
These flags are provided by mod_logio which is probably built in your Apache (as it for my Debian's Apache).
Solution 3:
Awstats is one way to do this but probably not the best