Подсчет трафика в Ubuntu с помощью VNSTAT

Один из читателей моего блога Александр с ником ALPom снова порадовал очень интересной и полезной статьей. За что ему огромная благодарность.


Доброго времени суток.
Когда я перешел на linux, некоторое время искал программу для подсчета использованного интернет-траффика.
Нужно это было, чтобы знать, когда сотовый оператор после достижения определенного объема переданных-принятых данных уменьшит скорость.
В итоге я остановился на vnstat - консольной утилите для подсчета траффика.

Установка vnstat в Ubuntu.

Установить ее легко, она есть в стандартных репозиториях: sudo apt-get install vnstat

Редактирование конфигурационного файла.

Как и почти любая программа в linux, vnstat настраивается через конфигурационный файл.
Расскажу немного о показавшихся мне интересными настройках. Открываем: sudo gedit /etc/vnstat.conf
MonthRotate 1 ## указывается день месяца, когда обнуляется месячный траффик. Полезно, когда это обнуление происходит не 1 числа, а, допустим 25.
UnitMode 1 ## определяет единицы измерения траффика.
0 - кибибайт, мебибайт, гибибайт, тебибайт (KiB/MiB/GiB/TiB)
1 - килобайт, мегабайт, гигабайт, терабайт (KB/MB/GB/TB)
Отличается тем, что
1 килобайт = 1000 байт, 1 мегабайт = 1000 килобайт = 1000000 байт, а
1 кибибайт = 1024 байт, 1 мебибайт = 1024 кибибайт = 1 048 576 байт и т.д.
Последние единицы измерения введены недавно для разрешения путаницы при переводе одних единиц в другие и из десятичной
системы в двоичную, но малоизвестны.

Кому интересно, можно почитать в Википедии.
Себе сразу поставил UnitMode 1 т.к. привычнее.
SaveInterval 2 ## Определяет время в минутах, через который записываются новые значения траффика в базу данных на винчестер, т.к. программа делает это не непрерывно, а через определенный интервал времени. По-умолчанию было 5, я себе поставил 2.
Больше я в конфигурационном файле ничего не менял.
Там есть еще много параметров, но, честно говоря, не разбирался за что они отвечают. 

Сохраняем конфиг и закрываем, изменения настроек вступают в силу сразу же.

Теперь создаем базу данных:

sudo vnstat -u -i ppp0 (где ppp0 - интерфейс, на котором надо определять траффик)

Теперь для проверки нужно попользоваться интернетом, чтобы программе было что заносить в базу данных.
Например, почитать статьи с www.linuxrussia.com

Подождав время, указанное в SaveInterval (помним, что показания программы изменяются не непрерывно, а скачками), можно посмотреть, что насчитала программа: vnstat

Без параметров - просто общая информация о траффике:
rx - получено,
tx - отправлено,
total - всего,
estimated - прогнозируемое.

Остальное, думаю, понятно.

Можно посмотреть по конкретному интерфейсу: vnstat -i ppp0

avg. rate - средняя скорость.

Также, можно посмотреть по месяцам,
vnstat -m -i ppp0
неделям:
vnstat -w -i ppp0


Дням: vnstat -d -i ppp0

Часам: vnstat -h -i ppp0

Также расскажу про маленькую хитрость.
Дело в том, что оператор сотовой связи обнуляет суточный траффик в полночь по времени Екатеринбурга, а я и мой компьютер живем по московскому времени.

То есть vnstat начинает новые сутки в полночь по Москве, а оператор - в 22 часа (разница с Екатеринбургом в 2 часа), и траффик показывается немного неправильно.

Я решил эту проблему, запустив программу в другой временной зоне.

Для этого открываем скрипт, который запускает демон vnstat при старте системы:
sudo gedit /etc/init.d/vnstat Вставляем строку: export TZ=Asia/Yekaterinburg, чтобы получилось так:



Этим мы заставим программу запускаться в временной зоне Екатеринбурга (и правильно считать траффик).

Теперь программой можно пользоваться.

Набирать каждый раз команду в терминале не очень удобно.

Можно, например, сократить
команду, создав алиас, или, как я, вывести показания в Conky - добавить в конфигурационный файл conky строки (если у вас нет проблемы с часовыми поясами, как у меня, то строку "export TZ=Asia/Yekaterinburg;" надо убрать):
Today total:${alignr}${execi 60 export TZ=Asia/Yekaterinburg; vnstat -d -i ppp0 | grep "`date +"%m\/%d\/%y"`" | awk '{print $8 " " $9}'} Month total:${alignr}${execi 120 export TZ=Asia/Yekaterinburg; vnstat -m -i ppp0 | grep "`LANG=en_GB.UTF-8 date +"%b '%y"`"| awk '{print $9 " " $10}'}

И получить (скорость считается встроенной в conky функцией):


Вот и все.

Надеюсь, кому-нибудь пригодиться. Вопросы можно задать в комментариях, чем смогу - помогу.

Автор статьи: ALPom

Поделиться:

Если у Вас возникли вопросы.

Приглашаю задавать их на сервисе вопросов и ответов: Ask LinuxRussia.com.
Там Ваши вопросы не потеряются и Вы быстрее получите ответ, в отличие от комментариев.

6 коммент. :

  1. Тра́Фик (от англ. traffic — «движение», «транспорт», «торговля»):
    Сетевой траФик — объём информации, передаваемой через компьютерную сеть за определённый период времени.

    ОтветитьУдалить
    Ответы
    1. Спасибо, буду знать. Честно говоря, считал, что трафик пишется с двумя "ф" именно потому, что происходит от англ. traffic.

      Удалить
  2. После обновления до Ubuntu 14.04 vnstat по непонятным причинам перестала работать. Неправильно отображался трафик, даже единицы измерения (какие уж там гигабайты, на мобильном-то интернете, за год бы столько набрать). Все время показывала одинаковые значения, которые обновлялись только по vnstat -u. Решить не удалось, пришлось удалить.

    ОтветитьУдалить
  3. А как создать конки ?Если можно по подробней расскажите.

    ОтветитьУдалить
  4. Error: Unable to read database "/var/lib/vnstat/ppp0".Как это исправить?

    ОтветитьУдалить