Задача: установить и настроить систему для сбора статистики о трафике на интерфейсах маленького сервера, отвечающую требованиям 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
Получится нечто такое:
That’s it!

