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 uses the network interface statistics provided by the kernel as information source. This means that vnStat won't actually be sniffing any traffic and also ensures light use of system resources. As it says on their website

Installing

Base

opkg install vnstat

Webserver (optional)

opkg install uhttpd vnstati

Configuring

The only configuring it really needs is to tell it what interface(s) to monitor, and some method of updating the database such as a cronjob. You might want to backup your database file. The vnstati package comes with a 'restore' init,d script that downloads the backup from a webserver upon reboot. Its up to you to chose how to backup/restore the data( via HTTP/FTP/SSH/ETC)

Setup

This step is required for vnStat to function.

The common choice for monitoring is your WAN interface. To locate your WAN ifname:

root@router-1:~# uci -P/var/state show network.wan.ifname
eth0.1
root@router-1:~# 	

Setup interfaces to monitor and create database.:

root@router-1:~# vnstat -u -i <WAN ifname> 

Database Updating

This step is required for vnStat to function. The package doesn't setup database updating at all. Its up to you to configure when vnStat will update. Use the daemon or a cron job.

Using included daemon:

/etc/init.d/vnstat enable
/etc/init.d/vnstat start
/etc/config/vnstat is the database restore config, not the vnstatd config. vnstatd config is located at /etc/vnstatd.conf

This same init.d script will automatically download a database backup if you configured /etc/config/vnstat corrrectly. Useful for recovering db after a router reboot. Down side is that there is no implemented upload method using the uci config. You will need to write a script that cron will run to do all the uploading, so why not use the same protocol for downloading too? I suggest rsync, ftp, or scp.

Using a cronjob:

Add to crontab:

echo "*/5 * * * * vnstat -u" >> /etc/crontabs/root

Restart cron with:

/etc/init.d/cron restart

Image Generation

You can install webif and it will generate images. But thats not lightweight so RealOpty developed scripts based off webif code that will generate the images without webif.

You might want to setup a crontab to execute this script every 15 min.

I always output the images to the tmpfs so it dont always write to flash.

#!/bin/sh
# vnstati image generation script.
# Source: http://code.google.com/p/x-wrt/source/browse/trunk/package/webif/files/www/cgi-bin/webif/graphs-vnstat.sh
 
WWW_D=/tmp/www/vnstat # output images to here
LIB_D=/var/lib/vnstat # db location
BIN=/usr/bin/vnstati  # which vnstati
 
outputs="s h d t m"   # what images to generate
 
# Sanity checks
[ -d "$WWW_D" ] || mkdir -p "$WWW_D" # make the folder if it dont exist.
 
# You might want to setup a link if it dont exist.
# [ -L /www/vnstat ] || ln -sf /www/vnstat /tmp/www/
 
# End of config changes
interfaces="$(ls -1 $LIB_D)"
 
if [ -z "$interfaces" ]; then
    echo "No database found, nothing to do."
    echo "A new database can be created with the following command: "
    echo "    vnstat -u -i eth0"
    exit 0
else
    for interface in $interfaces; do
        for output in $outputs; do
            $BIN -${output} -i $interface -o $WWW_D/vnstat_${interface}_${output}.png
        done
    done
fi
 
exit 1

Sample HTML

<META HTTP-EQUIV="refresh" CONTENT="300">
<html>
  <head>
    <title>Traffic of Interface eth1</title>
  </head>
  <body>
    <h2>Traffic of Interface eth1</h2>
    <table>
        <tbody>
            <tr>
                <td>
                    <img src="vnstat_eth1_s.png" alt="eth1 Summary" />
                </td>
                <td>
 
                    <img src="vnstat_eth1_h.png" alt="eth1 Hourly" />
                </td>
            </tr>
            <tr>
                <td valign="top">
                    <img src="vnstat_eth1_d.png" alt="eth1 Daily" />
                </td>
                <td valign="top">
                    <img src="vnstat_eth1_t.png" alt="eth1 Top 10" />
                    <br />
                    <img src="vnstat_eth1_m.png" alt="eth1 Monthly" />
                </td>
            </tr>
        </tbody>
    </table>
  </body>
</html>

AutoBackup and restore

If you don't want to use flash in your device you can use the ramdisk (/tmp), but this is only a temporary place, when your device reboot it's will be loose. These few change can minimalize your flash useing. It's wroted for a pendrive in device, but it's only optimal, you can use this an USB-less device.

Config files

In config files (/etc/vnstat.conf) please edit these lines:

DatabaseDir "/tmp/vnstat"

Don't forget edit vnstati (image output) generator script if you use it (config lines).

Script

Please make this file for /etc/init.d/vnstatbackup

#!/bin/sh
## Please visit http://wiki.openwrt.org/doc/howto/vnstat
 
BACKUP="/usb"
TEMP="/tmp"
DIRNAME="vnstat"
 
case $1 in
  backup)
    cp -r $TEMP/$DIRNAME $BACKUP
  ;;
  restore)
    cp -r $BACKUP/$DIRNAME $TEMP
  ;;
  *)
    echo "Please use 'backup' or 'restore' parameter for run";
  ;;
esac
 
exit 0

After:

root@router-1:~# chmod 755 /etc/init.d/vnstatbackup

Add for cron and for init

Do this: (backup every 30 minute, if you want other backup window please read cron section)

root@router-1:~# echo "*/30 * * * * /etc/init.d/vnstatbackup backup" >> /etc/crontabs/root
root@router-1:~# /etc/init.d/cron restart

Edit /etc/rc.local, like this: (important: The last line in this file must be 'exit 0')

mount /dev/sda1 /usb
/etc/init.d/vnstatbackup restore
 
exit 0

Note: Dont use the first line if you haven't USB device.

Back to top

doc/howto/vnstat.txt · Last modified: 2012/05/15 14:58 by pklaus