Как вести учёт и мониторинг потребления трафика с помощью vnStat
vnStat является лёгкой консольной утилитой, которая ведёт историю сетевого трафика в Linux. Фоновая служба vnstatd считывает счётчики интерфейсов из ядра и сохраняет их в небольшую базу данных. После этого вы можете смотреть трафик по часам, дням, месяцам и годам или следить за текущей скоростью в реальном времени. vnStat не перехватывает пакеты, поэтому нагрузка от него очень низкая. Он показывает, сколько трафика прошло через каждый интерфейс, но не показывает, какие IP-адреса, порты или соединения его создали.
В этой инструкции показано, как установить vnStat из репозитория или из исходного кода и как просматривать статистику трафика. vnStat пригодится на любом сервере, где трафик ограничен или тарифицируется, например на Linux VPS или выделенном сервере INTROSERV.
Установите vnStat из репозитория
Подключитесь к серверу по SSH. Подробнее см. Подключение через SSH.
Ubuntu and Debian
vnStat есть в стандартных репозиториях. Установите его:
sudo apt update sudo apt install -y vnstat
При установке служба vnstat запускается и добавляется в автозагрузку. Проверьте, что она работает:
sudo systemctl status vnstat
В выводе должно быть active (running). Если служба не запущена, добавьте её в автозагрузку и запустите командой sudo systemctl enable --now vnstat.

AlmaLinux и Rocky Linux
vnStat есть в репозитории EPEL. Подключите EPEL и установите vnStat:
sudo dnf install -y epel-release sudo dnf install -y vnstat
Добавьте службу в автозагрузку и запустите её:
sudo systemctl enable vnstat && sudo systemctl start vnstat
Проверьте, что она работает:
sudo systemctl status vnstat
Установите vnStat из исходного кода
Собирайте vnStat из исходного кода, если для вашего дистрибутива нет пакета или вам нужна самая новая версия.
Если vnStat уже установлен из репозитория, сначала удалите пакет: sudo apt remove -y vnstat в Ubuntu и Debian или sudo dnf remove -y vnstat в AlmaLinux и Rocky Linux. Обе установки используют одни и те же файл конфигурации, базу данных и имя службы, поэтому одновременно они конфликтуют.
Установите зависимости для сборки. В Ubuntu и Debian:
sudo apt update && sudo apt install -y build-essential libsqlite3-dev wget
В AlmaLinux и Rocky Linux:
sudo dnf group install -y "Development Tools" sudo dnf install -y sqlite-devel wget
Скачайте и распакуйте последний выпуск:
wget https://humdi.net/vnstat/vnstat-latest.tar.gz tar -xf vnstat-latest.tar.gz cd vnstat-*/
Архив распаковывается в каталог с номером версии в названии, например vnstat-2.13. Маска vnstat-*/ позволяет перейти в него, не вводя номер версии.
Соберите и установите vnStat:
./configure --prefix=/usr --sysconfdir=/etc && make && sudo make install
Параметр --prefix=/usr устанавливает программы в /usr/bin и /usr/sbin, а --sysconfdir=/etc размещает файл конфигурации в /etc/vnstat.conf.
В AlmaLinux и Rocky Linux с включённым SELinux, если vnStat раньше был установлен из репозитория, сначала восстановите метки SELinux для каталога базы данных. Иначе служба не запустится с ошибкой Permission denied:
sudo restorecon -Rv /var/lib/vnstat
Установите службу systemd, добавьте её в автозагрузку и запустите:
sudo cp -v examples/systemd/vnstat.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now vnstat
Проверьте версию и статус службы:
vnstat --version sudo systemctl status vnstat
Определите сетевой интерфейс
По умолчанию vnStat добавляет в свою базу все сетевые интерфейсы сервера, кроме петлевого. Чтобы увидеть интерфейсы, которые сейчас есть в базе, выполните:
vnstat --dbiflist
Список интерфейсов также показывает команда ip a. В примерах ниже используется интерфейс ens3. Замените его на имя своего интерфейса, например eth0 или enp1s0.
По умолчанию vnStat сохраняет новые данные в базу каждые 5 минут. Сразу после установки команда vnstat сообщает, что данных пока нет, например Not enough data available yet или No data. Подождите несколько минут и выполните команду снова.
Просмотр статистики трафика
Запустите vnstat без параметров, чтобы увидеть сводку по всем интерфейсам: трафик за текущие сутки и месяц с прогнозом на конец периода.
vnstat
Во всех отчётах rx означает входящий трафик, tx исходящий, а total их сумму.
Трафик по часам
Чтобы посмотреть 12 последних почасовых записей, выполните:
vnstat -i ens3 -h --limit 12

Трафик по дням
Чтобы посмотреть 2 последние записи по дням, выполните:
vnstat -i ens3 -d --limit 2
Без --limit число записей задаёт параметр ListDays в /etc/vnstat.conf, по умолчанию 30. Он ограничивает только вывод, а не данные в базе.
Трафик по месяцам
vnstat -i ens3 -m

Трафик по годам
vnstat -i ens3 -y
Трафик в реальном времени
Чтобы следить за текущей скоростью передачи данных, выполните:
vnstat -i ens3 -l
Скорость обновляется, пока вы не нажмёте Ctrl+C. Если команда работала дольше 10 секунд, vnStat после этого покажет сводку за это время.

Трафик за заданное число секунд
Чтобы измерить среднюю скорость трафика за определённое время, укажите его в секундах. Например, 20 секунд:
vnstat -i ens3 -tr 20
Без числа измерение длится 5 секунд. Результат появится по истечении этого времени.
График за последние 24 часа
Чтобы вывести трафик за последние 24 часа в виде текстового графика, выполните:
vnstat -i ens3 -hg

Для обработки статистики в скриптах используйте параметр --json или --oneline. Например, vnstat -i ens3 --json d выводит статистику по дням в формате JSON.
Задайте интерфейс по умолчанию
Если на сервере несколько интерфейсов, а проверяете вы обычно один из них, укажите его как интерфейс по умолчанию в файле конфигурации /etc/vnstat.conf. Откройте файл:
sudo nano /etc/vnstat.conf
В AlmaLinux и Rocky Linux nano по умолчанию не установлен. Установите его командой sudo dnf install -y nano или используйте vi.
Найдите строку Interface, удалите точку с запятой в её начале и укажите имя своего интерфейса:
Interface "ens3"
Сохраните файл. Теперь vnstat показывает этот интерфейс, если запустить его без параметра -i, например vnstat -d. Служба vnstat по-прежнему отслеживает все интерфейсы.
Полный список параметров выводит команда vnstat --longhelp, подробное описание есть в man vnstat.