20070823

vnstat: простая программа для подсчёта трафика

Часто оплата интернета напрямую зависит от количества переданных данных, проще говоря трафика. Особенно это характер для доступа в интернет через мобильный телефон (GPRS, EDGE, UMTS...).

Скажем, я сейчас пользуюсь тарифным планом, предполагающим оплату 20€ за пакет 500 МБ, однако после превыщения указанного предела, услуга не прерывается, но стоимость доступа в Интернет незаметно меняется: просто каждый мегабайт стоит уже около 6€. В общем, жуть. Понятно, что я заинтересован чётко отслеживать израсходованный мной трафик. Подобных ситуаций можно привести ещё много.

Подсчёт трафика в Linux дело несложное. Каждый может настроить iptables как ему угодно, написать свои скрипты, сохранять статистику в базе данных... Можно использовать готовые решения, вроде ntop. Однако для моих целей мне всё это показалось слишком сложным.

И я нашёл очень простой инструмент для учёта трафика: vnstat. Он, кстати, есть в репозиториях Debian, так что установка не представляет сложностей. Она практически не требует настройки, просто считает трафик и позволяет смотреть статистику. Думаю, для «домашнего» использования этого более чем достаточно.

Трафик считается отдельно для каждого сетевого устройства (интерфейса). Чтобы начать подсчёт трафика на том или ином интерфейсе, например ppp0 (в моём случае это подключение через мобильный телефон), надо выполнить следующую команду, которая создаст базу данных для этого интерфейса:

vnstat -u -i ppp0


В случае Debian включается и отключается подсчёт трафика автоматически при включении или выключении сетевого устройства (это можно делать также вручную).

И всё! Теперь весь трафик будет учтён!

Чтобы узнать суммарную статистику по трафику через интерфейс ppp0, достаточно выполнить следующую команду:

$ vnstat -i ppp0
Database updated: Thu Aug 23 22:00:01 2007

ppp0

received: 354.63 MB (76.6%)
transmitted: 108.14 MB (23.4%)
total: 462.77 MB

rx | tx | total
-----------------------+------------+-----------
yesterday 18.58 MB | 3.31 MB | 21.89 MB
today 39.39 MB | 6.28 MB | 45.68 MB
-----------------------+------------+-----------
estimated 42 MB | 6 MB | 48 MB


Как легко видеть, у меня в запасе до ограничения в 500 МБ ещё около 40 МБ. На этот пост точно хватит.

Дополнение: доступны и другие формы отчётов (см. man vnstat). Например, для просмотра использования трафика по месяцам:
$ vnstat -i интерфейс -m

по неделям:
$ vnstat -i интерфейс -w

по дням:
$ vnstat -i интерфейс -d

по часам:
$ vnstat -i интерфейс -h

и, наконец, для желающих формировать собственные отчёты, может пригодится
$ vnstat -i интерфейс  --dumpdb


Если же возникнет желание стереть (сбросить) всю собранную статистику и начать отсчёт с нуля, то, на мой взгляд, самый простой способ это сделать:
  1. остановить подсчёт статистики для используемого интерфейса:
    vnstat -i интерфейс -u -r --disable

  2. удалить базу данных с собранной статистики (файл /var/lib/vnstat/интерфейс)

  3. создать новую базу данных с помощью
    vnstat -u -i интерфейс
    и радоваться начатой заново жизни