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に変更しましょう。
例えば、DTIのVPSでは、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 で使えるオプションがいろいろありますから、自分の好みの形式にしてください。