Extremely simple bandwidth statistics collection with vnstat

Задача: установить и настроить систему для сбора статистики о трафике на интерфейсах маленького сервера, отвечающую требованиям KISS, оснащенную веб-интерфейсом и сохраняющую статистику после перезагрузки.

Дистрибутив: Debian Lenny

Нашим требованиям соответствует утилита vnstat, к которой полагается веб-интерфейс под оригинальным названием vnstat PHP frontend. vnstat не является “трафик-монитром” в том смысле, что он не прослушивает определенные интерфейсы (как, например, ntop), но запускается через интервалы времени, запоминает статистику из /proc и складывает ее в /var/lib/vnstat/. При таком раскладе, естественно, что никакой речи о “серьезном” биллинге не идет, однако же, мы получаем нересурсоемкую, KISS-систему, представляющую загруженность интерфейсов в наглядном виде.

Basic Installation

Установка и настройка тривиальны, поэтому от слов к делу:

sudo aptitude install vnstat

Создаем первичные “БД” для выбранных интерфейсов:

sudo vnstat -u -i eth1 --nick inet
sudo vnstat -u -i wlan0 --nick home

с -u создаем (обновляем) информацию об интерфейсе в /var/lib/vnstat, с -i указываем конкрентый интерфейс, с –nick задаем имя, которое будет отображаться в выводе статистики. Эти команды запускаются от привелегированного пользователя, просмотр статистики таких прав в дальнейшем не требует.

При установке добавилось cron-задание, по которому vnstat -u вызвается каждые 5 минут для обновления статистики. Согласно ману, если ваш канал толще 100Mbps, то это время нужно сократить и для 1Gb оно должно составлять 30 секунд. Помимо этого ограничения, vnstat также не умеет считать трафик на суб-интерфейсах.

Еще у него есть конфиг!

sudo sh -c 'vnstat --showconfig > /etc/vnstat.conf'

Опций несколько, я же поправил только default interface.

Просмотреть собранные данные можно либо просто запустив vnstat без аргументов, либо задав дополнительные ключи. На домашней страничке проекта показаны несколько таких красивых выводов, поэтому я не буду повторяться.

Web-interface

Homepage: http://www.sqweek.com/sqweek/index.php?p=1

Качаем:

wget http://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.4.tar.gz

Кладем в куда-нибудь, например в /srv/www/admin.example.com/stat/vnstat

Правим конфиг /srv/www/admin.example.com/stat/vnstat/config.php:

/srv/www/admin.example.com/stat/vnstat/config.php

30
31
32
33
34
35
36
37
38
39
    // list of network interfaces monitored by vnStat
    $iface_list = array('eth1', 'wlan0');
 
    //
    // optional names for interfaces
    // if there's no name set for an interface then the interface identifier
    // will be displayed instead
    //    
    $iface_title['eth1'] = 'inet';
    $iface_title['wlan0'] = 'home';

Надо указать бинарник, вывод которого будет парсится (я так понимаю), а $data_dir присвоить пустое значение:

54
55
    $vnstat_bin = '/usr/bin/vnstat';
    $data_dir = '';

Теперь в конфиге вхоста апача admin.exapmle.com пишем:

/etc/apache2/sites-available/admin.example.com

Alias /stat/vnstat "/srv/www/admin.example.com/stat/vnstat/"
 
<Location /stat/vnstat>
        AuthType Basic
        AuthName "Service admin"
        AuthuserFile /etc/apache2/service.passwd
        Require valid-user
</Location>

Аутентификация опциональна, но очень желательна; должна быть настроена, описывать не буду.

Все, теперь статистика будет доступна после аутентификации по адресу http://admin.example.com/stat/vnstat

Получится нечто такое:

vnstat stat graph (day)

vnstat stat summary stats

That’s it!