vnStatでネットワークトラフィックを集計する

以下のエントリでipコマンドでネットワーク通信量が確認できました．

ip コマンドでネットワーク通信量を確認する – matoken’s meme

端末を起動してからの通信量は確認できますが，再起動したりするとデータ量はクリアされてしまいます．MRTGやZabbixなどを使うのは大げさな感じがします．
もう少しお手軽なものがないかなと少し探してvnStatというものを見つけたので今回試してみました．

vnStat – a network traffic monitor for Linux and BSD

Debianでは vnstat と vnstati というパッケージが提供されています．vnstat が本体で， vnstati はイメージ出力のコマンドです．

まずは本体の vnstat を導入します．

$ sudo apt install vnstat

導入するとvnStatのデーモンが起動します．

$ sudo service vnstat status
● vnstat.service - vnStat network traffic monitor
Loaded: loaded (/lib/systemd/system/vnstat.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-04-30 00:46:09 JST; 5min ago
Docs: man:vnstatd(8)
man:vnstat(1)
man:vnstat.conf(5)
Main PID: 2045411 (vnstatd)
Tasks: 1 (limit: 18935)
Memory: 808.0K
CPU: 184ms
CGroup: /system.slice/vnstat.service
└─2045411 /usr/sbin/vnstatd -n

Apr 30 00:46:10 t430s vnstatd[2045411]: Interface "virbr0" added with 1000 Mbit bandwidth limit.
Apr 30 00:46:10 t430s vnstatd[2045411]: Interface "nm-br1" added with 1000 Mbit bandwidth limit.
Apr 30 00:46:10 t430s vnstatd[2045411]: Interface "anbox0" added with 1000 Mbit bandwidth limit.
Apr 30 00:46:10 t430s vnstatd[2045411]: Interface "lxcbr0" added with 1000 Mbit bandwidth limit.
Apr 30 00:46:10 t430s vnstatd[2045411]: Interface "docker0" added with 1000 Mbit bandwidth limit.
Apr 30 00:46:10 t430s vnstatd[2045411]: -> 7 new interfaces found.
Apr 30 00:46:10 t430s vnstatd[2045411]: Limits can be modified using the configuration file. See "man vnstat.conf".
Apr 30 00:46:10 t430s vnstatd[2045411]: Unwanted interfaces can be removed from monitoring with "vnstat --remove".
Apr 30 00:46:10 t430s vnstatd[2045411]: Info: vnStat daemon 2.6 started. (pid:2045411 uid:149 gid:165 64-bit)
Apr 30 00:46:10 t430s vnstatd[2045411]: Info: Monitoring (7): wlp3s0 (1000 Mbit) virbr0 (1000 Mbit) nm-br1 (1000 Mbit) lxcbr0 (1000 Mbit) enp0s2>

はじめはデータがないのでこんな感じの寂しい表示です．

$ vnstat [169/1082]

rx / tx / total / estimated
anbox0: Not enough data available yet.
docker0: Not enough data available yet.
enp0s25: Not enough data available yet.
lxcbr0: Not enough data available yet.
nm-br1: Not enough data available yet.
virbr0: Not enough data available yet.
wlp3s0: Not enough data available yet.

数分経ってから実行するとデータが記録されてログが出てきます．

$ vnstat

rx / tx / total / estimated
anbox0: Not enough data available yet.
docker0: Not enough data available yet.
enp0s25: Not enough data available yet.
lxcbr0: Not enough data available yet.
nm-br1: Not enough data available yet.
virbr0: Not enough data available yet.
wlp3s0:
2021-04 21.10 MiB / 3.70 MiB / 24.80 MiB / 22.25 MiB
today 21.10 MiB / 3.70 MiB / 24.80 MiB / 673.77 MiB

ネットワークインターフェイスが複数あって，特定のインターフェイスの情報だけを確認したい場合は -i オプションでインターフェイスが指定できます．

$ vnstat -i wlp3s0
Database updated: 2021-04-30 00:53:40

wlp3s0 since 2021-04-30

rx: 21.10 MiB tx: 3.70 MiB total: 24.80 MiB

monthly
rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
2021-04 21.10 MiB | 3.70 MiB | 24.80 MiB | 82 bit/s
------------------------+-------------+-------------+---------------
estimated 19.78 MiB | 2.47 MiB | 22.25 MiB |

daily
rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
today 21.10 MiB | 3.70 MiB | 24.80 MiB | 64.60 kbit/s
------------------------+-------------+-------------+---------------
estimated 573.38 MiB | 100.39 MiB | 673.77 MiB |

複数のインターフェイスの合計を指定する場合は， + でインターフェイスをつなげて指定します．

$ vnstat -i usb0+wlp3s0

vnStatインストール時に存在しなかったインターフェイスは監視されません．

$ vnstat -i usb0
Error: Interface "usb0" not found in database.

新しいネットワークインターフェイスを追加します．ここでは usb0 を登録しました．

$ sudo vnstat --add -i usb0 (1)
Adding interface "usb0" for monitoring to database...

Restart the vnStat daemon if it is currently running in order to start monitoring "usb0".
$ sudo service vnstat restart (2)
$ vnstat -i usb0 -d (3)

usb0 / daily

day rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
2021-04-30 2.03 MiB | 8.18 MiB | 10.21 MiB | 12.90 kbit/s
------------------------+-------------+-------------+---------------
estimated 26.57 MiB | 107.12 MiB | 133.70 MiB |

usb0 インターフェイスを登録

反映のためにvNstatを再起動する．

暫く待ってからカウントされているのを確認．

インターフェイスが切断されているときは disabled の表示になりますが，再接続されるとまたカウントされます．

$ vnstat | grep :
usb0 [disabled]:
wlp4s0:

情報の確認はいくつかの表示ができます．サマリー，5分毎，1時間毎，日毎，月毎，年毎，トップなど．
既定値がサマリーのようです．

-5 で5分毎(ここではwlp3s0を5分x6表示)

$ vnstat -i wlp3s0 -5 6

wlp3s0 / 5 minute

time rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
2021-05-24
14:35 1.43 MiB | 1.27 MiB | 2.70 MiB | 75.52 kbit/s
14:40 7.11 MiB | 1.44 MiB | 8.55 MiB | 238.96 kbit/s
14:45 1.60 MiB | 1.28 MiB | 2.87 MiB | 80.34 kbit/s
14:50 1.12 MiB | 1.17 MiB | 2.29 MiB | 63.94 kbit/s
14:55 1.49 MiB | 1.50 MiB | 2.99 MiB | 83.47 kbit/s
15:00 748.04 KiB | 1.18 MiB | 1.91 MiB | 53.41 kbit/s
------------------------+-------------+-------------+---------------

-h で1時間毎(ここでは1時間x3表示)

$ vnstat -h 3

wlp4s0 / hourly

hour rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
2021-05-24
05:00 3.28 MiB | 623.99 KiB | 3.88 MiB | 9.05 kbit/s
17:00 510.09 MiB | 7.29 MiB | 517.38 MiB | 1.21 Mbit/s
18:00 286.84 MiB | 8.32 MiB | 295.16 MiB | 1.65 Mbit/s
------------------------+-------------+-------------+---------------

-d で日毎(ここでは1日x3表示)

$ vnstat -d 3

wlp3s0+enp0s25+usb0 / daily

day rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
2021-05-23 936.47 MiB | 820.25 MiB | 1.72 GiB | 170.56 kbit/s
2021-05-24 1.56 GiB | 300.01 MiB | 1.85 GiB | 183.94 kbit/s
2021-05-28 483.40 MiB | 372.19 MiB | 855.60 MiB | 83.07 kbit/s
------------------------+-------------+-------------+---------------
estimated 642.75 MiB | 494.88 MiB | 1.11 GiB |

estimated も表示されます．これはこの調子で使い続けるとこのくらいという推測のようで利用時間や利用量が少なかったり，利用状況が変わる場合信頼できない値になります．

-m で月毎

$ vnstat -m

wlp3s0+enp0s25+usb0 / monthly

month rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
2021-04 1.54 GiB | 571.46 MiB | 2.09 GiB | 6.94 kbit/s
2021-05 19.13 GiB | 4.53 GiB | 23.66 GiB | 303.40 kbit/s
------------------------+-------------+-------------+---------------
estimated 76.48 GiB | 18.12 GiB | 94.60 GiB |

-y で年毎

$ vnstat -y

wlp4s0 / yearly

year rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
2021 47.48 GiB | 3.16 GiB | 50.64 GiB | 34.07 kbit/s
------------------------+-------------+-------------+---------------
estimated 117.29 GiB | 7.81 GiB | 125.09 GiB |

-t でtop(ここではTop3)

$ vnstat -t 3

wlp4s0 / top 3

# day rx | tx | total | avg. rate
-----------------------------+-------------+-------------+---------------
1 2021-05-19 7.76 GiB | 1.52 GiB | 9.29 GiB | 923.28 kbit/s
2 2021-05-27 8.01 GiB | 373.46 MiB | 8.37 GiB | 832.45 kbit/s
3 2021-05-18 5.66 GiB | 165.91 MiB | 5.83 GiB | 579.24 kbit/s
-----------------------------+-------------+-------------+---------------

開始( -b )，終了( -e )期間指定(ここでは2021-05-18〜2021-05-25を指定)

$ vnstat -i usb0 -b 2021-05-18 -e 2021-05-25
Database updated: 2021-05-24 05:09:40

usb0 [disabled] since 2021-05-17

rx: 5.84 GiB tx: 1.03 GiB total: 6.87 GiB

monthly
rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
2021-05 5.84 GiB | 1.03 GiB | 6.87 GiB | 29.41 kbit/s
------------------------+-------------+-------------+---------------
estimated 7.80 GiB | 1.37 GiB | 9.17 GiB |

daily
rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
2021-05-23 3.24 GiB | 756.16 MiB | 3.98 GiB | 395.74 kbit/s
2021-05-24 45.06 MiB | 10.71 MiB | 55.78 MiB | 25.18 kbit/s
------------------------+-------------+-------------+---------------
estimated 210.01 MiB | 49.92 MiB | 259.93 MiB |

-hg, --hoursgraph で1時間ごとのグラフ

$ vnstat -hg
eth0 22:15
^ t
| t
| t
| t
| t
| t
| t
| t
| rt t
| rt r rt rt
-+--------------------------------------------------------------------------->
| 23 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22

h rx (MiB) tx (MiB) ][ h rx (MiB) tx (MiB) ][ h rx (MiB) tx (MiB)
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 0.0 0.0
02 0.0 0.0 ][ 10 0.0 0.0 ][ 18 3.3 9.1
03 0.0 0.0 ][ 11 0.0 0.0 ][ 19 27.0 19.4
04 0.0 0.0 ][ 12 0.0 0.0 ][ 20 25.0 14.6
05 0.0 0.0 ][ 13 0.0 0.0 ][ 21 31.0 150.8
06 0.0 0.0 ][ 14 0.0 0.0 ][ 22 20.3 37.2

-l でリアルタイム(^cで終了，統計が表示される)

$ vnstat -l
Monitoring wlp4s0... (press CTRL-C to stop)

rx: 7.39 Mbit/s 632 p/s tx: 234.20 kbit/s 306 p/s^C

wlp4s0 / traffic statistics

rx | tx
--------------------------------------+------------------
bytes 241.31 MiB | 10.07 MiB
--------------------------------------+------------------
max 8.33 Mbit/s | 322.19 kbit/s
average 322.69 kbit/s | 13.47 kbit/s
min 0 bit/s | 0 bit/s
--------------------------------------+------------------
packets 187533 | 92295
--------------------------------------+------------------
max 716 p/s | 382 p/s
average 29 p/s | 14 p/s
min 0 p/s | 0 p/s
--------------------------------------+------------------
time 104.55 minutes

機関の指定もできるようですが，使い方が悪いのか機関によってはうまく使えません．ここではサマリ表示で指定していない期間の2021-05-24も表示されていて， -h 表示でデータが出てこない．

$ vnstat -i usb0 --begin "2021-05-23 13:00" --end "2021-05-23 20:00"
Database updated: 2021-05-24 05:09:40

usb0 [disabled] since 2021-05-17

rx: 5.84 GiB tx: 1.03 GiB total: 6.87 GiB

monthly
rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
2021-05 5.84 GiB | 1.03 GiB | 6.87 GiB | 29.41 kbit/s
------------------------+-------------+-------------+---------------
estimated 7.80 GiB | 1.37 GiB | 9.17 GiB |

daily
rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
2021-05-23 3.24 GiB | 756.16 MiB | 3.98 GiB | 395.74 kbit/s
2021-05-24 45.06 MiB | 10.71 MiB | 55.78 MiB | 25.18 kbit/s
------------------------+-------------+-------------+---------------
estimated 210.01 MiB | 49.92 MiB | 259.93 MiB |
$ vnstat -i usb0 --begin "2021-05-23 13:00" --end "2021-05-23 20:00" --hours

usb0 [disabled] / hourly

hour rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
no data available
------------------------+-------------+-------------+---------------

vnstati も試してみます．
これは vNstat の画像出力コマンドです．Debianではvnstatとは別パッケージの vnstati に分かれているのでこれを導入します．

$ sudo apt install vnstati

範囲などのオプションは vnstat と共通です．

$ vnstati -i usb0 -h 7 -o /tmp/today.png

環境1

$ dpkg-query -W vnstat vnstati
vnstat 2.6-3
vnstati 2.6-3
$ lsb_release -dr
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
$ arch
x86_64

環境2

$ dpkg-query -W vnstat vnstati
vnstat 2.6-3
vnstati 2.6-3
$ lsb_release -dr
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
$ arch
x86_64

環境3

$ dpkg-query -W vnstat
vnstat 2.6-1
$ lsb_release -dr
Description: Ubuntu 20.04.2 LTS
Release: 20.04
$ arch
x86_64