SNMPといくつかの質問を読んだ後、ここで役立つと思います。デバイスへのSNMPサービスとしてのエージェントの役割を理解していると思います(SQLと同様に、ストレージへのAPIです)。
SQLクエリを実行すると、SQLエンジンがすべての作業を実行し、結果を返します。ストレージの方法とストレージの実行場所を意識する必要はありません。
しかし、MIBは実際のストレージではないので、私のエージェントの役割は何ですか?
エージェントが次のようにMIBのみを登録する場合 チュートリアル したがって、ハンドラーとしてはまったく使用されず、設定してアクセスできるpyhiscalストレージがあることを意味しますハンドラーをバイパスせずにそこに。チュートリアルでは、これをすべて行います。
netsnmp_register_int_instance("my example int variable",
my_registration_oid,
OID_LENGTH(my_registration_oid),
&example1, NULL);
ハンドラーで呼び出しを処理する必要はありません。
アプリケーションの保留中の要求キューを監視したいので、application_pending_requestに対するすべてのSNMP要求が実行され、キューの深さを返すエージェントが必要だとします。結果を得るためにアプリケーションキューをポーリングする必要があるのに、なぜ実際のMIBが必要なのですか?
SNMPがどのように機能するかについて根本的な誤解があります。迅速で汚い比較:SNMP MIBはホスト名に似ています。 MIBは、OIDをフレンドリ名にマップします-たとえば.1.3.6.1.2.1.1.1.0
=> SNMPv2-MIB::sysDescr.0
=> Host Description
(uname出力)。
SNMPサーバー(エージェント)から情報を取得するには、その情報を特定のOIDで公開する必要があります。
SNMPデーモンが情報を公開するには、(通常は)2つのことが必要です。
情報を取得するには、OID-これは、数値OIDまたはMIBファイルからの「わかりやすい」名前のいずれかです。 [〜#〜] snmp [〜#〜]クライアント。
SNMP「ブラウザ」は通常MIBファイルを必要とします。これは、MIBファイルがないと、意味のない番号のリストしか表示できないためです。
したがって、あなたの質問に対する答えは、「MIBファイルは[〜#〜]必要ありません[〜#〜]、MIBファイルはSNMPと対話する必要がある人間」。
あなたの例(キューの長さを報告する)をとると、あなたがnet-snmp
(UCD-SNMP)を使用しているようにあなたが好きなチュートリアルから聞こえます。net-snmp
には、この種の機能が組み込まれています。マニュアルページと設定ファイルの例を読んでください(外部スクリプトを実行するためのexec
ディレクティブに特に注意してください:通常キューの長さを出力するスクリプトを実行し、次のようにクエリしますOIDモニタリングソフトウェア/ SNMPクライアント)