Система учета трафика для сервера среднего уровня
Те, кто администрирует linux-серверы, наверняка хотели бы знать, сколько трафика через них прошло. Самый простой способ – это использовать ifconfig, но, во-первых, там подсчитывается сырой трафик, а во-вторых, там нет статистики.
Конечно, если вы хотите вести полный мониторинг, нужно использовать серьезные утилиты-снифферы, например ntop или tcpdump, но они ресурсоемки и для небольших серверов непригодны. Существует ли способ считать трафик, не загружая сервер? Оказывается, существует. Речь идет о небольшой тулзе vnstat. vnstat не прослушивает весь трафик, он запускается через определенные интервалы времени и запоминает статистику из /proc. Чем примечателен этот способ, так это тем, что загруженность интерфейсов мало меняется, например, за 2-3 минуты (по умолчанию vnstat запускается через 5 минут) – если пользователи качают фильм, то за 2-3 минуты они его не скачают. Поэтому vnstat дает вполне реальную картину загрузки. Кроме этого, vnstat умеет сохранять статистику после перезагрузки.
Установка
Установка тривиальна:
apt-getinstallvnstat
Далее настраиваем утилиту на работу с интерфейсами. У меня это выглядело так:
sudovnstat -u -i eth0 --nick Inet
sudovnstat -u -i eth1 --nick Local
sudovnstat -u -i tap0 --nick Tunnel
Ключ –u создает запись об интерфейсе, ключ –i указывает собственно на интерфейс, --nick задает имя, которое будет использоваться при выводе статистики. После установки в cron добавилось задание запускать vnstat каждые 5 минут. Время можно легко поправить в самом cron’е. В Сети советовали уменьшить время до 1 минуты, если у вас гигабитный канал. Собственно, это почти все. Посмотреть статистику можно, если запустить vnstat без параметров. На домашней странице (http://humdi.net/vnstat/) есть пример более интересного вывода, например параметр –d выводит статистику по дням, параметр –tr примерную скорость передачи данных по интерфейсу.
Веб-интерфейс
К этой утилите можно прикрутить и веб-интерфейс. Загружаем отсюда:
wgethttp://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.4.tar.gz
Далее несколько действий с конфигом. Открываем config.php, там находим строку с переменной $iface_list, в которой перечисляем интерфейсы:
$iface_list = array('eth0', 'eth1', 'tap0');
Чуть ниже даем интерфейсам имя:
$iface_title['eth0'] = 'Inet';
$iface_title['eth1'] = 'Local';
$iface_title['tap0'] = 'Tunnel';
Далее находим следующие строчки и пишем в них:
$vnstat_bin = '/usr/bin/vnstat';
$data_dir = '';
Теперь осталось только настроить хост Апача, но это мы здесь опустим. У меня получилась такая картинка:
Теперь я вижу, когда мои пользователи спят:).
Aleksey Golovanov, Minsk 2010
Конечно, если вы хотите вести полный мониторинг, нужно использовать серьезные утилиты-снифферы, например ntop или tcpdump, но они ресурсоемки и для небольших серверов непригодны. Существует ли способ считать трафик, не загружая сервер? Оказывается, существует. Речь идет о небольшой тулзе vnstat. vnstat не прослушивает весь трафик, он запускается через определенные интервалы времени и запоминает статистику из /proc. Чем примечателен этот способ, так это тем, что загруженность интерфейсов мало меняется, например, за 2-3 минуты (по умолчанию vnstat запускается через 5 минут) – если пользователи качают фильм, то за 2-3 минуты они его не скачают. Поэтому vnstat дает вполне реальную картину загрузки. Кроме этого, vnstat умеет сохранять статистику после перезагрузки.
Установка
Установка тривиальна:
apt-getinstallvnstat
Далее настраиваем утилиту на работу с интерфейсами. У меня это выглядело так:
sudovnstat -u -i eth0 --nick Inet
sudovnstat -u -i eth1 --nick Local
sudovnstat -u -i tap0 --nick Tunnel
Ключ –u создает запись об интерфейсе, ключ –i указывает собственно на интерфейс, --nick задает имя, которое будет использоваться при выводе статистики. После установки в cron добавилось задание запускать vnstat каждые 5 минут. Время можно легко поправить в самом cron’е. В Сети советовали уменьшить время до 1 минуты, если у вас гигабитный канал. Собственно, это почти все. Посмотреть статистику можно, если запустить vnstat без параметров. На домашней странице (http://humdi.net/vnstat/) есть пример более интересного вывода, например параметр –d выводит статистику по дням, параметр –tr примерную скорость передачи данных по интерфейсу.
Веб-интерфейс
К этой утилите можно прикрутить и веб-интерфейс. Загружаем отсюда:
wgethttp://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.4.tar.gz
Далее несколько действий с конфигом. Открываем config.php, там находим строку с переменной $iface_list, в которой перечисляем интерфейсы:
$iface_list = array('eth0', 'eth1', 'tap0');
Чуть ниже даем интерфейсам имя:
$iface_title['eth0'] = 'Inet';
$iface_title['eth1'] = 'Local';
$iface_title['tap0'] = 'Tunnel';
Далее находим следующие строчки и пишем в них:
$vnstat_bin = '/usr/bin/vnstat';
$data_dir = '';
Теперь осталось только настроить хост Апача, но это мы здесь опустим. У меня получилась такая картинка:
Теперь я вижу, когда мои пользователи спят:).
Aleksey Golovanov, Minsk 2010
Компьютерная газета. Статья была опубликована в номере 28 за 2010 год в рубрике soft