Продолжая эпопею считалок и мониторилок сетевых интерфейсов и трафика, рассмотрим утилиту vnstat. Vnstat — консольная утилита для учета сетевого трафика. Сохраяет историю сетевого трафика для выбранных интерфейсов. Трафик считается отдельно для каждого интерфейса (как входящий, так и исходящий). Доступна различная детализация отчетов: час, день, неделя, месяц… Проект свежий и живой.
Выполняем установку:
После установки утилита «любезно» предупредила, что необходимо внести значение основного сетевого интерфейса в конфигурацию. Ну а если нас заинтересует информация о утилите, необходимо посетить ресурс http://humdi.net/vnstat/, либо же воспользоваться справочной системой FreeBSD.
Начинаем попытки «подружиться» с утилитой. Для начала скопируем пример конфигурационного файла непосредственно в рабочий конфигурационный файл:
# cp /usr/local/etc/vnstat.conf.sample /usr/local/etc/vnstat.conf |
Следующим шагом редактируем /usr/local/etc/vnstat.conf, подстраивая его под свои нужды. Я же изменил только название интерфейса, на котором будем «слушать» трафик. Потом в конфигурационном файле находим опцию DatabaseDir, и согласно указанному значению, создаем базу данных (в моем частном случае это /var/db/vnstat, поскольку настройки по умолчанию этого параметра я не изменял) и прописываем права на эту папку.
# mkdir /var/db/vnstat
# chown vnstat /var/db/vnstat
|
Добавляем службу в автозапуск в rc.conf:
Теперь проинициализируем интерфейсы, для которых будем собирать статистику:
# vnstat -u -i tun0
Error: Unable to read database «/var/db/vnstat/tun0».
Info: -> A new database has been created.
# >vnstat -u -i re0
Error: Unable to read database «/var/db/vnstat/vlan8».
Info: -> A new database has been created. |
Также, есть возможность воспользоваться vnStat PHP Frontend — написанный на PHP web-интерфейс для vnStat. Переходим в каталог /usr/local/www и скачиваем архив web-интерфейса:
https://github.com/bjd/vnstat-php-frontend
Скачиваем, распаковываем скачанный архив:
https://github.com/bjd/vnstat-php-frontend/archive/refs/heads/master.zip |
Потом переименовываем каталог с vnStat PHP Frontend в более «дружелюбное» название: vnstat
Правим конфигурационный файл web-интерфейса /usr/local/www/vnstat/config.php до следующего состояния:
# cat /usr/local/www/vnstat/config.php
<?php
error_reporting(E_ALL | E_NOTICE);
$locale = ‘en_EN.UTF-8’;
$language = ‘ru‘;
$iface_list = array(‘re0‘, ‘tun0‘);
$iface_title[‘re0‘] = ‘Internal’;
$iface_title[‘tun0‘] = ‘OpenVPN‘;
$vnstat_bin = ‘/usr/local/bin/vnstat’;
$data_dir = ‘./dumps’;
$graph_format=’svg’;
define(‘GRAPH_FONT’,dirname(__FILE__).’/VeraBd.ttf’);
define(‘SVG_FONT’, ‘Verdana’);
define(‘DEFAULT_COLORSCHEME’, ‘dark’);
?> |
Создадим каталог для дампа:
# mkdir /usr/local/www/vnstat/dumps |
Потом добавлем в cron следующие строки:
*/5 * * * * root /usr/local/bin/vnstat --dumpdb -i vlan8 > /usr/local/www/vnstat/dumps/vnstat_dump_vlan8
*/5 * * * * root /usr/local/bin/vnstat --dumpdb -i tun0 > /usr/local/www/vnstat/dumps/vnstat_dump_tun0
После измнений перестартовываем cron:
Далее добавляем в конфигурационный блок Apache следующий блок:
Alias /vnstat/ "/usr/local/www/vnstat/"
<Directory "/usr/local/www/vnstat/">
Options none
AllowOverride All
Order Allow,Deny
Allow from all
</Directory>
|
После внесения изменений, необходимо перезапустить Apache:
Несколько скриншотов:


Смотрим вывод команды vnstatd и запускаем vnstat в режиме служб
root@ws1:/ # vnstatd
vnStat daemon 2.6 by Teemu Toivola <tst at iki dot fi>
-d, --daemon fork process to background
-n, --nodaemon stay in foreground attached to the terminal
-s, --sync sync interface counters on first update
-D, --debug show additional debug and disable daemon
-?, --help show this help
-v, --version show version
-p, --pidfile <file> select used pid file
-u, --user <user> set daemon process user
-g, --group <group> set daemon process group
--config <config file> select used config file
--noadd don't add found interfaces if no dbs are found
--alwaysadd always add new interfaces even when some dbs exist
See also "man vnstatd".
root@ws1:/ # vnstatd -d --config /usr/local/etc/vnstat.conf
No interfaces found in database, adding available interfaces...
Interface "vtnet0" added with 1000 Mbit bandwidth limit.
Interface "pflog0" added with 1000 Mbit bandwidth limit.
-> 2 new interfaces found.
Limits can be modified using the configuration file. See "man vnstat.conf".
Unwanted interfaces can be removed from monitoring with "vnstat --remove".
root@ws1:/ #
При попытке посмотреть вывод vnstat, получаем ошибку о недостаточности данных
root@ws1:/ # vnstat
rx / tx / total / estimated
pflog0: Not enough data available yet.
vtnet0: Not enough data available yet.
root@ws1:/ #
Проверяем работает ли vnstat
root@ws1:/ # ps auxww | grep vnstat
root 24666 0.0 0.2 13880 4128 — Ss 17:39 0:00.07 vnstatd -d —config /usr/local/etc/vnstat.conf
root 24754 0.0 0.1 11288 2148 0 S+ 17:58 0:00.00 grep vnstat
Смотрим вывод спустя минут 10
Database updated: 2020—11—29 18:35:00
rx: 596.07 KiB tx: 670.25 KiB total: 1.24 MiB
rx | tx | total | avg. rate
————————+————-+————-+—————
2020—11 596.07 KiB | 670.25 KiB | 1.24 MiB | 4 bit/s
————————+————-+————-+—————
rx | tx | total | avg. rate
————————+————-+————-+—————
today 596.07 KiB | 670.25 KiB | 1.24 MiB | 155 bit/s
————————+————-+————-+—————
estimated 769 KiB | 865 KiB | 1.60 MiB |
Добавляем задание в планировщик CRON на запуск каждые 5 минут.
Проверяем изменения в cron
0 0,12 * * * /usr/local/bin/certbot renew
* * * * * cd /data/osbsd_com; php wp-cron.php doing_wp_cron > /dev/null 2>&1
*/5 * * * * /usr/local/bin/vnstat -u
Вывод справки vnStat
root@ws1:/ # vnstat —help
vnStat 2.6 by Teemu Toivola <tst at iki dot fi>
-5, —fiveminutes [limit] show 5 minutes
-h, —hours [limit] show hours
-hg, —hoursgraph show hours graph
-d, —days [limit] show days
-m, —months [limit] show months
-y, —years [limit] show years
-t, —top [limit] show top days
-b, —begin <date> set list begin date
-e, —end <date> set list end date
—oneline [mode] show simple parsable format
—json [mode] [limit] show database in json format
—xml [mode] [limit] show database in xml format
-tr, —traffic [time] calculate traffic
-l, —live [mode] show transfer rate in real time
-i, —iface <interface> select interface
Use «—longhelp» or «man vnstat» for complete list of options.
root@ws1:/ # vnstat —longhelp
vnStat 2.6 by Teemu Toivola <tst at iki dot fi>
-q, —query query database
-s, —short use short output
-5, —fiveminutes [limit] show 5 minutes
-h, —hours [limit] show hours
-hg, —hoursgraph show hours graph
-d, —days [limit] show days
-m, —months [limit] show months
-y, —years [limit] show years
-t, —top [limit] show top days
-b, —begin <date> set list begin date
-e, —end <date> set list end date
—oneline [mode] show simple parsable format
—json [mode] [limit] show database in json format
—xml [mode] [limit] show database in xml format
—add add interface to database
—remove remove interface from database
—rename <name> rename interface in database
—setalias <alias> set alias for interface
-i, —iface <interface> select interface
-?, —help show short help
-D, —debug show some additional debug information
-v, —version show version
-tr, —traffic [time] calculate traffic
-l, —live [mode] show transfer rate in real time
-ru, —rateunit [mode] swap configured rate unit
—limit <limit> set output entry limit
—style <mode> select output style (0—4)
—iflist show list of available interfaces
—dbdir <directory> select database directory
—locale <locale> set locale
—config <config file> select config file
—showconfig dump config file with current settings
See also «man vnstat» for longer descriptions of each option.
Несколько примеров вывода vnstat:
Вывод статистики vnStat по часам в графическом виде
-+—————————————————————————>
| 19 20 21 22 23 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
h rx (KiB) tx (KiB) ][ h rx (KiB) tx (KiB) ][ h rx (KiB) tx (KiB)
19 0.0 0.0 ][ 03 0.0 0.0 ][ 11 0.0 0.0
20 0.0 0.0 ][ 04 0.0 0.0 ][ 12 0.0 0.0
21 0.0 0.0 ][ 05 0.0 0.0 ][ 13 0.0 0.0
22 0.0 0.0 ][ 06 0.0 0.0 ][ 14 0.0 0.0
23 0.0 0.0 ][ 07 0.0 0.0 ][ 15 0.0 0.0
00 0.0 0.0 ][ 08 0.0 0.0 ][ 16 0.0 0.0
01 0.0 0.0 ][ 09 0.0 0.0 ][ 17 823.3 7444.3
02 0.0 0.0 ][ 10 0.0 0.0 ][ 18 1058.3 11342.7
Вывод статистики в реальном времени
Monitoring vtnet0… (press CTRL-C to stop)
rx: 216 bit/s 0 p/s tx: 1.02 kbit/s 1 p/s
Вывод статистики vnStat за последние 5 минут
time rx | tx | total | avg. rate
————————+————-+————-+—————
17:35 217 B | 250 B | 467 B | 12 bit/s
17:40 197.77 KiB | 1.42 MiB | 1.61 MiB | 44.99 kbit/s
17:45 204.09 KiB | 2.43 MiB | 2.63 MiB | 73.53 kbit/s
17:50 203.15 KiB | 1.71 MiB | 1.91 MiB | 53.36 kbit/s
17:55 218.09 KiB | 1.71 MiB | 1.93 MiB | 53.86 kbit/s
18:00 144.80 KiB | 291.47 KiB | 436.27 KiB | 11.91 kbit/s
18:05 169.99 KiB | 557.05 KiB | 727.05 KiB | 19.85 kbit/s
18:10 336.20 KiB | 4.86 MiB | 5.19 MiB | 145.12 kbit/s
18:15 99.94 KiB | 276.70 KiB | 376.64 KiB | 10.28 kbit/s
18:20 307.41 KiB | 5.12 MiB | 5.42 MiB | 151.46 kbit/s
————————+————-+————-+—————
Просмотр статистики на интерфейсе vtnet0 за день
root@ws1:/ # vnstat -i vtnet0 -d
day rx | tx | total | avg. rate
————————+————-+————-+—————
2020—11—29 1.11 MiB | 8.10 MiB | 9.21 MiB | 1.18 kbit/s
————————+————-+————-+—————
estimated 1.47 MiB | 10.70 MiB | 12.17 MiB |