Продолжая эпопею считалок и мониторилок сетевых интерфейсов и трафика, рассмотрим утилиту 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 |