Logging bandwidth use?
In an attempt to make my life easier I want to log all bandwidth used on my server for a day, and then somehow export it. It doesn't matter much how it exports it because I can parse that stuff myself, but I need software to be able to accurately log traffic going in and out of eth0.
If anyone knows of such software, I'd be grateful if you could provide a link. I have already Googled for such things yet found nothing suitable.
Cheers.
My recommendation is vnStat:
vnStat is a console-based network traffic monitor for Linux and BSD that keeps a log of network traffic for the selected interface(s)
It works as advertised and seems like a good match for your needs.
To facilitate parsing you'd probably like to take a look at the --xml
and --dumpdb
switch in the vnstat documentation:
-
--xml
: Show database content for selected interface or all interfaces in xml format. All traffic values in the output are in KiB. -
--dumpdb
: Instead of showing the database with a formatted output, this output will dump the whole database in a format that should be easy to parse with most script languages.
Feature list:
- quick and simple to install and get running
- gathered statistics persists through system reboots
- can monitor multiple interfaces at the same time
- several output options
- summary, hourly, daily, monthly, weekly, top 10 days
- optional png image output (using libgd)
- months can be configured to follow billing period
- light, minimal resource usage
- same low cpu usage regardless of traffic
- can be used without root permissions
When using logstash with kibana this is easy to setup
What we did is log the total traffic to a log file with the following bash script.
LOGPATH="systemstatus.log"
timestamp() {
date +"%Y-%m-%dT%T.%N"
}
while ( sleep 60 ) ; do
#clear log file
truncate -s 0 $LOGPATH
#log timstamp and type of log line
echo -n "$(timestamp) linux::systemstatus::network " >> $LOGPATH
#remove tabs and spaces from grep result
grep "eth" /proc/net/dev |head -n1|sed -e 's/^[ \t]*//'| sed -n 's/ \+/ /gp' >> $LOGPATH
Done
Nxlog exports the log to logstash and kibana.
In logstash the string is parsed to individual values Kibana makes the traffic visible in a derivative histogram (this shows the difference from 1 value to the next)
This gives us a nice overal graph of the used bandwidth. On top of this we also log the CPU, Disk and Memory usage of the server.
Note: we parse the whole log line from /proc/net/dev into seperate values just in case we want to monitor on lost packeges or errors