2010年07月15日

実践SNMP+Java SNMP4Jの特徴

SNMP4J(http://www.snmp4j.org)はALIIライセンスで提供されているSNMP APIライブラリです。

<特徴>
1)Apache License Version 2.0による提供
(SNMP4J-AgentX, SNMP4J-AgentJMXはGPL又はコマーシャル)
オープンソースのSNMP API for Javaが少ないのはもちろんですが、
ALIIライセンスとなるとSNMP4Jしか選択肢は無いかと。

2)スレッドセーフ
僕の理解では、ここでいうスレッドセーフ意味は複数スレッドからAPIを利用した際に、
SNMP Request IDの生成・管理においてIDの一意性を保証する点とその受信(レスポンス)
結果の関連付けを保証するという点だと思っています。
#Request IDはSNMPマネージャ(リクエスト送信)側が生成するIDで、RequestとResponseを
#関連付ける為に利用されるIDです。
1つのSNMPオブジェクトを複数のスレッドで参照するという利用方法は少ないのですが、
それぞれで別々にSNMPオブジェクトを生成し、別エージェントにポーリングするという
ケースがあります。この時にAPIがスレッドセーフでないと想定しない結果になります。

3)位置づけは低レベルAPI
利用してみるとわかるのですが、SNMP4Jは開発者にPDU、MIBデータ型など低レベルな
レイヤを意識させるAPIになっています。
商用APIでは、低レベルはもちろんのこと、ユーティリティや、ユーザインタフェース用の
クラス群も充実していることが多いです。
他のSNMP APIを利用した人は、その上にのる高レベルAPIを用意したいという気持ちに
なるかもしれません。

4)MIBパーサはAPIに含まれません
単純なSNMPアプリケーションでは、MIBパーサが必要になるケースは少ないのですが、
ユーザがOIDやオブジェクト値を直接見る・操作するような場合、MIBパーサが欲しいと
思うことがあります。
例えば、RFC1213-MIB::ifTable.ifAdminStatusは列挙型で、そのオブジェクト値(INTEGER)
には、up(1), down(2), testing(3)という意味があります。
この値を画面に表示する場合、MIBパーサが無いとそのまま1、2、3と表示することになります
(又は自身で変換処理を実装するしかありません)が、MIBパーサがあるとMIBファイルを元に
変換してくれます。あ、もちろん、OID<->オブジェクト名も変換出来ます。
mibble(http://www.mibble.org/)というオープンソースのMIBパーサ
(GPL)がありますが、僕は利用したことがありません。

5)エージェントAPI(開発)も利用可能
こちらは最近になって、シュミレータとして少し利用した程度で特にコメントは無いです。
低レベルなAPIなので、処理が軽く1サーバPCで数万台のエージェントをシュミレートしても
十分なレスポンス性能が出ました。

6)ドキュメントが少ない
初めての人はこれで挫折しそうになります。
ドキュメントはjavadocかメーリング・リストなんですが、それでも十分とは言いがたく、 
学習コストが掛かります。ちなみに、メーリング・リストの反応は早いと思います。
(Frankさんが積極的に回答してます)


<環境構築>
SNMP4Jダウンロードページ(http://www.snmp4j.org/html/download.html)から
SNMP4J sources and libraryをダウンロード・解凍し、dist/snmp4j-*.*.*.jarにクラスパスを
通せば準備完了です(エージェント開発の話はしばらくはしませんので)。

 
入門SNMP
入門SNMP
posted with amazlet at 13.01.12
ダグラス・R. マウロ ケビン・J. シュミット
オライリー・ジャパン
売り上げランキング: 257,278

Java ネットワーク プログラミング 基礎からわかる 完全入門
永嶋 浩
技術評論社
売り上げランキング: 228,941

Posted by netbuffalo at 18:52│TrackBack(0) 実践SNMP+Java 


この記事へのトラックバックURL

この記事へのコメント
5
期待してまっす
Posted by 先に寝る人 at 2010年07月17日 04:11