CentOSで簡易なトラフィックモニタ


こんにちは。

少し前にSDN/NFV基盤上で基盤そのものや仮想ロードバランサを試す機会があり、トラフィックが中継・バランスされている様子をキャプチャするだけだと面白くないなと思い、あくまで「眺める用」ですが、CentOS6.x上で簡単なトラフィックモニタを製作してみました。

実は/sys/class/netの下にあるインタフェースの統計情報のファイル(テキスト)を毎秒参照してncursesで画面更新しているだけなのですが、実際トラフィックを流すとそれなりにモニタできている(トラフィックが流れている感がある)ので面白いです。

見ているファイル

このあたりのファイルを見ています。他にもコリジョン数とかいろいろあるのでディレクトリを覗いてみるとよいと思います。
"eth0"としている箇所はお使いのインタフェース名で読み替えてください。
これらのファイルには単にパケット数やバイト数といった数値が格納されています。

/sys/class/net/eth0/statistics/rx_packets
/sys/class/net/eth0/statistics/rx_bytes
/sys/class/net/eth0/statistics/rx_errors
/sys/class/net/eth0/statistics/rx_dropped
/sys/class/net/eth0/statistics/tx_packets
/sys/class/net/eth0/statistics/tx_bytes
/sys/class/net/eth0/statistics/tx_errors
/sys/class/net/eth0/statistics/tx_dropped

こんな感じ

OpenStackのHorizonからコンソールで見る想定でncursesを使ったので「いまどき風」ではないですが。

[おまけ]L2 transparent

本題とそれますが、NFV基盤上の試験のためL2トランスペアレントなVNF(Virtual Network Function)の疑似をしたいと思い、このモニタを動かすLinux上で左右のインタフェースをLinuxブリッジでつないだので、叩いたコマンドを備忘録的に書き留めます。
下記の"brvnf"はブリッジ名で任意です。下例では[eth1-brvnf-eth2]とつなぎ、トランスペアレント動作をさせています。

  brctl addbr brvnf
  brctl addif brvnf eth1
  brctl addif brvnf eth2
  ifconfig brvnf up

まとめ

一見実装が面倒そうなトラフィックモニタですが、Linux上であればこれらのファイルを参照し簡易に行うことができます。
プレーンテキストなのでシェルスクリプト等でも簡単に扱えますね。

ソース全体はここ(github)に上げてありますので興味のある方はご自由にお取りください。

それでは。