GNetWatchを用いたネットワークパフォーマンスの監視

 GNetWatchは、ネットワークの監視とパフォーマンスの測定を目的に作成されたツールであり、ネットワーク上にあるホスト群の状態確認、様々なサイズとサービス品質によるホストへのpingリクエストの送信、SNMP情報の取得といった操作が行えるのがその特長だ。その他にもGNetWatchは、Wiresharknmapをサポートすることで、パケットの傍受やネットワーク上に接続されたホスト群の監査をする機能も実装している。

 残念ながら、Ubuntu、Fedora、openSUSEの場合、これらのリポジトリにGNetWatchのパッケージは収録されていない。とは言うものの、Javaで記述されたGNetWatchのダウンロードに関しては、ソースファイルだけでなく、javadocとユーザマニュアルおよび必要なサードパーティ製ライブラリなどもバンドルされた圧縮ファイルが一括で取得できるようになっている。つまり、このバンドルファイルのダウンロードとインストール以外に必要となる実質的な準備作業は、WebブラウザとJava Runtime Environment(JRE)のインストールだけなのだ。ただしGNetWatchは32ビット版でコンパイルされたライブラリを一部使用するため、64ビット版マシンであっても32ビット版のJREをインストールする必要があり、下記のようなエラーに遭遇した場合は、当該システムにて64ビット版JREが使われている可能性が疑われる。なお本稿を執筆するにあたっては、Sunから提供されているjre-6u6-linux-i586.binおよびGNetWatchのバージョン3.1を使用した。

Exception in thread "GUI" java.lang.UnsatisfiedLinkError:
.../libswt-pi-gtk-3235.so: .../libswt-pi-gtk-3235.so: 
wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch) $ file libswt-pi-gtk-3235.so libswt-pi-gtk-3235.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), stripped

 64ビット版に関する警告が出されなかった場合は、そのまま下記の手順にてGNetWatchのインストールと起動をすればいい。なおこの設定では、32ビット版Firefoxのインストールも必要となる。

$ tar xzvf /FromWeb/GNetWatchBundle-Linux-3_1.tar.gz
$ cd ./GNetWatchBundle-Linux-3_1/
$ export MOZILLA_FIVE_HOME=/usr/lib/firefox-2.0.0.14
$ export LD_LIBRARY_PATH=`pwd`:$MOZILLA_FIVE_HOME
$ /usr/local/jre1.6.0_06/bin/java -Xmx1G -jar GNetWatchBundle.jar

gnetwatch1_thumb.jpg
GNetWatch

 上記の手順にてGNetWatchの配布用tarボールを展開したフォルダには、各種の設定に用いる多数のXMLファイルが収録されているはずだ。例えばGNetWatchBundle-Linux-3_1ディレクトリにあるconfig.xmlファイルは、ロケールおよびGNetWatchで使用可能なキュー数を始め(ここでのキューはホストへのpingなどに使用する)、その他のプラットフォーム固有なオプションの指定に使用する。特にLinux用のバンドル版GNetWatchをダウンロードした場合は、プラットフォーム固有のオプション群に対する正しい設定を施さなくてはならない。またGNetWatchのGUIにある中央ペインに初期状態で表示させるツリー表示については、そのホスト群に関するユーザ指定をinitial-objects.xmlという設定ファイルにて記述するようになっている。

 GNetWatchにおけるGUI操作の中心となるのが中央ペインのホスト群に対するアクション指定であり、こうしたアクションの実行結果の詳細については、処理対象のホストに関連付けられたビュー表示にて確認できるようになっている。ここでの基本的な操作手順は、ユーザ定義のフォルダないしそのサブフォルダを選択すると、左側のペインがアクティブになり、新規のグループ(フォルダ)、ネットワーク、IPv4/v6アドレスの追加ができるというものだ。

 この左側ペインにて追加したホストは自動で保存されるが、こうしたホストの追加操作については若干の不満が感じられる。まず最初に挙げられるのは、ホストのセットアップが終わっただけの段階の左側ペインには何も表示されず、ユーザ定義のフォルダないしそのサブフォルダが選択されるまでは、単なるデッドスペースと化していることだ。また新規グループを追加する操作では、グループテキストの入力フィールドでEnterを押してもグループ作成は行われず、いちいちテキスト入力ボックスの下部にあるadd groupボタンをクリックしなくてはならない。同様の操作はIPv4ターゲットの場合でも必要であり、しかも私が確認した限りにおいて、IPv4アドレスの入力時にタイプミスをした場合の訂正法は用意されておらず、間違ったIPv4アドレスについては削除した上で再登録しなくてはならないようなのである。

 ホストおよびネットワークに対する各種の操作は、中央ペインでのターゲット選択に続けたActionメニューでのアクション指定という手順にて行う。例えば、特定ホストが現在動作中であるかを確認したければ“ping target”アクションを指定すればいい。これにより中央ペインにて選択したターゲットのup/downビューの下にpingというアクションが追加され、送信先ホストに対するpingの往復時間が表示されるはずだ。そしてpingアクションを追加したup/downビューをダブルクリックすると、pingの所用時間の履歴グラフが確認できる他、当該ホストに対する全pingイベントの履歴および、過去30秒、5分、1時間の各統計値を掲載した新規ページが右側に追加表示される。ただし、このタブに示された統計情報を更新させるには、中央ペインに戻って再度ダブルクリックをしなければならない。

 UDPおよびHTTPを用いたホストの負荷テストも、Targetメニューでの“Set IP Options”ないし“Set HTTP Options”の指定と、それに続けたActionメニューでのUDPないしHTTPフラッディングの開始という手順にて行う。これらのアクションを開始させると、ホストへのping送信時と同様の操作が行われ、この場合もターゲットの下に新規アクションが挿入されて、アクションの処理結果を確認するためのビューが追加されるようになっている。

 先に触れたようにGNetWatchはWiresharkを用いたネットワークトラフィックの傍受機能を有しており、ここで検出されたホストとネットワークは中央ペインに表示されるという仕様になっているが、Wiresharkを介したIPスニッフィングを行う際には若干の注意が必要である。まず、一般ユーザ権限で実行したGNetWatchは「sudo tethereal」の使用を試みないので、root以外のユーザがパケットをキャプチャする方法としては、これが最も簡単な手順となるはずだ。そしてGNetWatchで使用するユーザのパスにてtetherealシェルスクリプトを作成する場合は、パスワード入力なしでtshark実行ファイルの本体を起動できるようにしておかなくてはならない。また、GNetWatchの有すパケットスニッフィング機能ではホストの検出しかできない点にも留意しておくべきだろう

 その他に感じた不満は、コンテクストメニューの不在が操作性を大きく損ねているという点だ。例えば中央ペインにてホストを右クリックしてもコンテクストメニューは表示されないが、pingアクションを右クリックすれば停止用コマンドを含んだコンテクストメニューが表示されて欲しいところである。

 GNetWatchの収集した情報は、JDBCを介してリレーショナルデータベースに格納される。ただしGNetWatchはデフォルトでHSQLDBを使用するようになっているので、GNetWatchの使用にあたってデータベースのセットアップをユーザが行う必要はない。特にJDBCのコレクション機能は、複数の大規模ネットワークからデータ収集をする場合に役立ち、また異なる場所から同一のデータベースに接続するといった操作も可能にしている。

 GNetWatchを再起動させると、前回終了時に実行中であったアクション群が自動的に再開されるようになっている。例えば、複数のホストに対するping送信およびそれらのCPU負荷とメモリ空き容量の測定を行っていたのであれば、GNetWatchの再起動によりこれらのアクションは自動ですべて再開できるのだ。

 pingの往復時間の測定法、nmapの使用法、特定ホストに対するHTTPリクエストのフラッディング法といった一般的なタスクの具体的な実行手順については、ユーザマニュアルの第5章を参照して頂きたい。

まとめ

 GNetWatchの操作性については、Standard Widget Toolkit(SWT)の採用もあって、Javaアプリケーションであることを忘れさせるレベルの完成度に到達しているが、実際のGUI操作に関しては若干ぎこちない部分が残されている点も否めない。多数のホスト群を扱うネットワークモニタリングツールとして特にGNetWatchが優れているのは、前回中断した監視タスクを自動で再開させる機能の実装であり、CPU負荷や空きメモリ容量の確認機能に関してはシェルスクリプトによる拡張に対応している(マニュアルの第3.4.1節を参照)。ホスト群に対してpingやnmapを定期実行するタイプのユーザであれば、GNetWatchを使用することでターミナル主体の操作スタイルから解放され、分かりやすいグラフィカル表示にてpingの遅延時間を確認できるようになるはずだ。

Ben Martinは10年以上にわたってファイルシステムに取り組んでおり、博士課程の修了後、現在はlibferris、ファイルシステム、検索ソリューションを中心としたコンサルティング業に従事している。

Linux.com 原文(2008年7月10日)