Подсчет трафика в 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
  • https://www.blogger.com/profile/16335769935030695977 Василий Алексеенко

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

    • https://www.blogger.com/profile/00865845114198842309 Edward Kobylyanets

      Исправил.

    • ALPom

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

  • ALPom

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

  • https://www.blogger.com/profile/08887998962572898781 Александр Суровцев

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

  • https://www.blogger.com/profile/06926728644448647075 Дмитрий Тлостюк

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