vnstat - Command Line Tool to check how much bandwidth you use
Written by Guillermo Garron
Date: 2008-05-13 10:36:30 00:00
It is always useful to know how much bandwidth you are using, also to check if your provider is honoring the contract you signed with them.
At my office I have installed Cacti and as I have a layer 3 SNMP capable switch, I can graph the bandwidth that all my office's PCs uses, and also the main pipe to the Internet (My ADSL connection), but at home, I do not have such an expensive switch (and I do not need it), and my ADSL modem is not SNMP capable, so Cacti is not a solution, but with Linux Operating System there is always a solution, and the one for this kind of problem is vnstat.
To install it run:
sudo aptitude install vnstat
Then you need to initialize the database, and add a cronjob task, but it is easy and automatic. First determine the name of your NIC or NICs for that run:
sudo ifconfig
My output is:
eth2 Link encap:Ethernet HWaddr 00:19:d1:ea:e6:3f inet addr:10.87.58.2 Bcast:10.87.58.7 Mask:255.255.255.248 inet6 addr: fe80::219:d1ff:feea:e63f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:55660 errors:0 dropped:0 overruns:0 frame:0 TX packets:47538 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:66480203 (63.4 MiB) TX bytes:5316732 (5.0 MiB) Base address:0x20c0 Memory:92200000-92220000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:66740 errors:0 dropped:0 overruns:0 frame:0 TX packets:66740 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:64959780 (61.9 MiB) TX bytes:64959780 (61.9 MiB)
As you can see, my unique interface is called eth2 so I need to run:
vnstat -u -i eth2
This will initiate the database, and add one script called /etc/cron.d/vnstat
, containing this line:
# /etc/cron.d/vnstat: crontab entries for the vnstat package 0-55/5 * * * * root if [ -x /usr/bin/vnstat ] && [ `ls /var/lib/vnstat/ | wc -l` -ge 1 ]; then /usr/bin/vnstat -u; fi
So, now you just need to wait until the database populate with data, after a while you can run some of these commands:
vnstat -h
And will show an hourly graph like this:
eth2 10:10 ^ r | r | r | r | r | r r | r r | r r | r r | r r -+---------------------------------------------------------------------------> | 11 12 13 14 15 16 17 18 19 20 21 22 23 00 01 02 03 04 05 06 07 08 09 10 h rx (kB) tx (kB) h rx (kB) tx (kB) h rx (kB) tx (kB) 11 0 0 19 0 0 03 0 0 12 0 0 20 0 0 04 0 0 13 0 0 21 0 0 05 0 0 14 0 0 22 0 0 06 0 0 15 0 0 23 0 0 07 0 0 16 0 0 00 0 0 08 0 0 17 0 0 01 0 0 09 31947 1798 18 0 0 02 0 0 10 16201 772
or:
vnstat -d
And you will get a daily graph like this:
eth2 / daily day rx | tx | total ------------------------+-------------+---------------------------------------- 13.05. 47.02 MB | 2.51 MB | 49.53 MB %%%%%%%%%%%%%%%%%%%%%%%%: ------------------------+-------------+---------------------------------------- estimated 110 MB | 4 MB | 114 MB
As I do not have enough data, my graphs are a little bit boring. You can read the man page to explore other options.