vnstatとvnstatiについて

vnstatを使ってみたので、メモをかねて雑記にしておきます。

vnstatはネットワークトラフィックを簡単にレポートできるGPLライセンスのツールです。
公式はここです http://humdi.net/vnstat/


トラフィックの中身までは解析しませんから、スループットに影響を及ぼしにくいです。
CentOSの場合は、rpmforgeにパッケージがありますから、簡単に使えるようになります。

Installed Packages
Name       : vnstat
Arch       : i386
Version    : 1.10
Release    : 1.el5.rf
Size       : 142 k
Repo       : installed
Summary    : Console-based network traffic monitor
URL        : http://humdi.net/vnstat/
License    : GPL
Description: vnstat is a network traffic monitor that keeps a log of daily network
           : traffic for the selected interface(s). vnstat is not a packet sniffer.

このパッケージを入れると、/etc/cron.d/vnstat が作られて、5分おきに情報収集を始めますが、いくつかの設定があります。

[root@gate ~]# cat /etc/cron.d/vnstat
MAILTO=root

*/5 * * * * nobody /usr/sbin/vnstat.cron

最初に注意すべき点は、nobodyで実行する点です。
vnstatコマンドをrootで実行すると、設定によってはnobodyユーザで書き込めない状態になり、レポートの源泉が作れない状態になります。


先程の /etc/cron.d/vnstatで5分おきに呼び出していた内容は

#!/bin/bash
VNSTAT_CONFIG="/etc/sysconfig/vnstat"

if [ ! -r "$VNSTAT_CONFIG" ]; then
    echo "vnstat.cron: File \"$VNSTAT_CONFIG\" could not be read." >&2
    exit 1
fi

source "$VNSTAT_CONFIG"

if [ -z "$VNSTAT_OPTIONS" ]; then
    echo "vnstat.cron: Options VNSTAT_OPTIONS not defined in file \"$VNSTAT_CONFIG\"." >&2
    exit 1
fi

/usr/bin/vnstat -u $VNSTAT_OPTIONS $@

となっています。
重要なのは、最初の方にある"/etc/sysconfig/vnstat"です。

[root@gate ~]# cat /etc/sysconfig/vnstat
VNSTAT_OPTIONS="-i eth0"

初期では、eth0です。
ここを、トラフィック情報を取得したいNICに変更しましょう。
例えば、DTIVPSでは、eth0の代わりに・・・

[root@gate ~]# cat /etc/sysconfig/vnstat
VNSTAT_OPTIONS="-i venet0"

こんな感じです。
ここで、cronを待たずに

[root@gate ~]# /usr/sbin/vnstat.cron

なんてやってしまうと情報を格納しているファイルのオーナーがrootになってしまい、nobodyで書けなくなった結果、自動的に更新されなくなったりするので注意しましょう。
やってしまったときは、chownで戻してあげれば大丈夫です。

暫く待つか、rootで実行+パーミッション変更を行うと、

[root@gate ~]# ls -lA /var/lib/vnstat
合計 8
-rw-r--r-- 1 nobody nobody 2272 12月 17 23:00 .venet0
-rw-r--r-- 1 nobody nobody 2272 12月 17 23:00 venet0

のようにIF名のファイルが出来ます。
これが、情報を格納しているファイルですね。

この状態で、vnstatコマンドを実行すると、情報が表示されます。

[root@gate ~]# vnstat
Database updated: Fri Dec 17 23:05:01 2010

   venet0 since 12/17/10

          rx:  1.32 GiB      tx:  1.91 GiB      total:  3.23 GiB

   monthly
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
       Dec '10      1.32 GiB |    1.91 GiB |    3.23 GiB |   18.52 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated      2.42 GiB |    3.49 GiB |    5.91 GiB |

   daily
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
         today      1.32 GiB |    1.91 GiB |    3.23 GiB |  326.55 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated      1.38 GiB |    1.99 GiB |    3.36 GiB |

vnstatコマンドでは、複数のIFを対象にすることも出来ます。
こんな感じです。

[root@gate ~]# cat /etc/sysconfig/vnstat
VNSTAT_OPTIONS="-i eth0 -u -i eth1"

VNSTAT_OPTIONS="-i eth0 -i eth1"
#複数IFをやるときには、-i毎に-uを付ける必要があるようです。
#エラーは出ないのですが、実際更新されなかったので修正します。

修正方法を検討中です。


また、表示する方法も何種類かあります。
例えば、テキストベースで表示すると

[root@gate ~]# vnstat -h
 venet0                                                                   23:10
  ^                                                         t
  |                                                         t
  |                                                         t
  |                                                        rt
  |                                                        rt
  |                                                        rt
  |                                                        rt
  |                                                        rt
  |                                                   t    rt
  |                                                   t rt rt
 -+--------------------------------------------------------------------------->
  |  00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23

 h  rx (KiB)   tx (KiB)      h  rx (KiB)   tx (KiB)      h  rx (KiB)   tx (KiB)
00          0          0    08          0          0    16      10072     315260
01          0          0    09          0          0    17     137910     142819
02          0          0    10          0          0    18     932057    1214991
03          0          0    11          0          0    19      59116      64380
04          0          0    12          0          0    20     106670     119660
05          0          0    13          0          0    21     109816     112527
06          0          0    14          0          0    22      32037      34505
07          0          0    15          0          0    23       3363       3434


他にも、範囲を指定してレポートを指定する -h -d -m -wなどのオプションがあります。

  • iはIF指定です。


面白いのは -lの real time表示です。
使い方はこんな感じです

[root@gate ~]# vnstat -l -i venet0
Monitoring venet0...    (press CTRL-C to stop)

   rx:        4 kbit/s     5 p/s          tx:        4 kbit/s     3 p/s


 venet0  /  traffic statistics

                           rx         |       tx
--------------------------------------+------------------
  bytes                      380 KiB  |         386 KiB
--------------------------------------+------------------
          max             896 kbit/s  |      932 kbit/s
      average           98.06 kbit/s  |    99.61 kbit/s
          min               0 kbit/s  |        0 kbit/s
--------------------------------------+------------------
  packets                        847  |             737
--------------------------------------+------------------
          max                161 p/s  |         142 p/s
      average                 27 p/s  |          23 p/s
          min                  0 p/s  |           0 p/s
--------------------------------------+------------------
  time                    31 seconds

開始してからCTRL-Cで止めるまでの間トラフィックの表示、止めた後に集計がでます。

Linuxを管理していて、ネットワークトラフィックがどれぐらいあるのか確認するには良いと思います。


さて、ここまではvnstatです。
もう一つ vnstatiが残っています。
vnstatiの情報、日本には少ないみたいなんでまずは一番わかり易い画像を貼ります。

先程のvnstat -hよりグラフィカルな表示になります。
cronで生成しておけば利用者へのアナウンスにも使えるわけです。


困ったのは、vnstatiがvnstatパッケージに入っていなかったことです。
vnstati入りのパッケージもどこかにあるのかも知れませんが、私はソースからコンパイルしました。

公式ページから、
http://humdi.net/vnstat/
vnstat-1.10.tar.gz - source for Linux and BSD (75.9 KiB)

をダウンロード->展開->移動

wget http://humdi.net/vnstat/vnstat-1.10.tar.gz
tar xf vnstat-1.10.tar.gz
cd vnstat-1.10

makeだけだとvnstatiはコンパイルされません。
allをつけましょう。 この時に、すでにvnstatはRPMでいれてありますから、make installではないことにも注意しましょう。

vnstat-1.10]# make all

そうすると、srcの中に

[root@gate vnstat-1.10]# ls -la src/vnstati
-rwxr-xr-x 1 root root 87076 12月 18 01:04 src/vnstati

vnstatiが出来ます。

あとは、vnstatiを使うだけです。
上で貼ったグラフの作り方はこんな感じです。

./vnstati -vs -i venet0 -o /var/www/html/admin/traffic-venet0.png
  • oは出力先
  • vsはグラフ配置
  • iは IF名です。

./vnstati --help で使えるオプションがいろいろありますから、自分の好みの形式にしてください。

データが溜まりだすと、こんな感じになります。