質問

PDU pdu = new PDU();
pdu.setType(PDU.SET);

pdu.add(new VariableBinding(new OID("1.3.6.1.4.1.100.1.1"), new Counter64(System.currentTimeMillis())));
pdu.add(new VariableBinding(new OID("1.3.6.1.4.1.100.2.1"), new OctetString("some string")));

TransportMapping transport = null;
Snmp snmp = null;

try {
    transport = new DefaultUdpTransportMapping();
    transport.listen();

    snmp = new Snmp(transport);
    snmp.send(pdu, getCommunityTarget());
} catch (Exception e) {
    // error occurred
}

これが、SNMPトラップを送信してアラームを上げる方法です。 SNMPエージェントでVaribleを設定し、MIBブラウザーで閲覧しています。 PDUタイプをPDU.TRAPとして設定した場合はどうなるかを知りたいです。 161ではなくポート162で動作し、MIBブラウザーではなくトラップレシーバーでは表示されません。違いはなんですか? PDU.TRAPを使用する目的は何ですか?私のエージェントはどのようにそれをキャッチできますか?アラームを上げてクリアするためのベストプラクティスは何ですか?

役に立ちましたか?

解決 2

SNMPエンティティを実装する場合、単純な「トラップ送信者」の代わりに、いわゆる「トラップ指示ポーリング」コンセプトを実装する方が良いことがよくあります。後者の場合、SNMP4Jはすぐに使用でき、最初のSNMP4J-Agentを使用できます。これは、Apache 2のオープンソースライセンスにもライセンスされています。

ネットワークでトラップが迷子になる可能性があるため、トラップ指向のポールアプローチには多くの利点がありますが、エージェントパーツを実装するためにはより多くの努力が必要です。

元の質問について:

  • セットPDUを送信するときは、コマンドレスポンダー(エージェント)にそのエンティティに関する情報を変更するように依頼します。
  • トラップまたはより良い通知PDUを送信する場合は、イベントについてコマンドジェネレーター(マネージャー)に通知する必要があります。トラップ方向のポルリングコンセプトを配置すると、コマンドジェネレーターは、コマンドレスポンダーのMIBの特定の(クリシカルな)サブツリーのデータの変更を効率的に検出するために、 *lastCangedオブジェクトの定期的に(5分ごとに5分ごと)リクエストを定期的に送信します。変更が検出された場合(通知PDUまたはポーリングのいずれかを介して、Commamnd ResponderからCommand Generatorによって変更されたデータが要求されます。

他のヒント

違いは役割です。セットはエージェントに対してマネージャーによって実行され、トラップは逆です。基本的なSNMP4Jは、SNMPマネージャーの実装のみをサポートします。これ エージェントのいくつかの側面を実装することもできますが、些細なことではありません。ただし、実際に実装しようとしている2つのうちのどれを伝えるのは難しいです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top