マスターエージェントは、Solstice Enterprise Agents 技術の主要構成要素です。マスターエージェントは、デーモンプロセスとして動作し、ユーザーデータグラムプロトコル (UDP) のポート 161 で SNMP 要求を受信します。またマスターエージェントは、ほかのポートをオープンして、さまざまなサブエージェントから SNMP トラップ通知を受信します。これらのトラップは、構成ファイルでの定義に従ってさまざまなマネージャに転送されます。
システムを最初に起動すると、システムの起動スクリプトファイルによってマスターエージェントが呼び出されます。マスターエージェントが起動されると、さまざまな構成ファイルが読み込まれます。次に、サブエージェントが動作可能になり、さまざまなサブエージェントのサブツリー OID を定義し、サブエージェント自身の MIB を設定することによって、適切なアクションが実行されます。マスターエージェントは、次の機能を提供します。
サブエージェントの起動
サブエージェントとの通信
サブエージェントの登録
サブエージェントへの要求送信
サブエージェントからの応答受信
サブエージェントからの通知トラップ
ポート 161 を使用する snmpd (Domain Mamager の一部) などの SNMP エージェントを実行している場合は、Solstice Enterprise Agents は実行できません。
マスターエージェントにより起動する方法 - マスターエージェントは、SEA_SNMPConfiguration_Directory にあるエージェントリソースファイルを使ってすべてのエージェントを起動できます。エージェントは、マスターエージェントのリソースファイルの指定に従って起動されます。マスターエージェントがサブエージェントの起動に成功すると、そのサブエージェントのテーブルのエントリ行が作成され、そのサブエージェントに対する適切な値が、MIB 変数に代入されます。次に、サブエージェントがマスターエージェントに登録され、マスターエージェントから SNMP 要求を受信できるようになります。
システムブート時に手動または自動で起動する方法 - システム管理者やユーザーは、エージェントリソースファイルがないサブエージェントを手動で起動できます。あるいは、システムの起動時に、起動スクリプトによってサブエージェントを起動することもできます。これらのエージェントは、マスターエージェントを起動したあとにしか起動できません。また、これらのエージェントは、Solstice Enterprise Agents のソフトウェア開発キット (SDK) を使って作成し、適切なライブラリにリンクしておく必要があります。それによって、サブエージェントをマスターエージェントに動的に登録できます。
サブエージェントからマスターエージェントへの通信は、UDP ポート 161 を使って行われます。サブエージェントからマスターエージェントへのトラップの送信については、 「トラップ通知」で説明します。
マスターエージェントは、サブエージェントごとに個別のポートで通信を行います。
また、マスターエージェントは、登録されているサブエージェントが起動し、動作しているかどうかを、次の条件をもとに確認します。
マスターエージェントによって各サブエージェントに送信される、Get、Get Next、および Set 要求ごとのタイムアウト機構
マスターエージェントとサブエージェントとの間にアクティビティが存在しないこと。マスターエージェントは、エージェントリソースファイルで定義されている watch_dog_time に従って、特定のサブエージェントが実行状態かどうかを判断します。ある特定の設定期間にサブエージェントとマスターエージェントとの間にアクティビティがない場合は、SNMP Get 要求をサブエージェントに送信することによってサブエージェントが動作可能になります。
サブエージェントを登録するために、マスターエージェントは、サブエージェントを MIB に結び付けます。次に、マスターエージェントは、以下のどちらかの方法を使って、サブエージェントの現在の位置を決めます。
静的な方法 - マスターエージェントは、エージェントリソースファイルを読み込みます。このリソースファイルには、それぞれのサブエージェントのエントリが含まれています。
動的な方法 - マスターエージェントは、サブエージェントから情報を受信します。サブエージェントは、登録 API を使って、マスターエージェントに登録するために必要な MIB オブジェクトを含む SET 要求を送信します。
バインドポリシーは、SNMP オブジェクト識別子 (OID) の登録に関するものです。これは、さまざまなサブエージェントに SNMP 要求をディスパッチする際のマスターエージェントの意思決定に影響します。マスターエージェントは、表 3-1 に示すバインドポリシーをサポートします。
表 3-1 バインドポリシー
登録の種類 |
登録方法 |
---|---|
個別変数登録 |
サブエージェントは個々の変数を管理できる |
行の登録 |
サブエージェントは各行または複数の行を管理できる |
テーブルの登録 |
サブエージェントは、テーブルの全体および一部分に登録を行うことができる。テーブルの一部分の登録とは、テーブルのいくつかのカラムを登録することである。たとえば、テーブルに c1〜c5 のカラムがある場合、サブエージェントは、そのテーブルの c3 と c5 のカラムだけを登録できる |
二重登録 |
二重登録は行えない |
重複登録 |
重複登録の場合、マスターエージェントは、OID が最も一致している要求をディスパッチする |
マスターエージェントは、2 つのモードによる SNMP 要求 (Get、Get Next、および Set) の転送をサポートしています。省略可能な引数をコマンド行呼び出しに指定することによって、モードが示されます。モードは次のとおりです
送信可能な要求を次に示します。
SET - マルチフェーズ形式で設定を実装します。まず、Set 要求内のすべての varbind が、Get 要求によって検索されます。Get 要求が成功すると、Set 要求が各サブエージェントに送信されます。Set 要求が成功すると、SUCCESS 応答がマネージャに送信されます。Set 要求が失敗すると、別の Set 要求が元の値とともにサブエージェントに送信され、失敗した Set 要求は取り消されます。Set 要求は、処理中の他の SNMP 要求が完了してから開始されます。
サブエージェントは、マスターエージェントにトラップを送信します。マスターエージェントは、どのマネージャがトラップを受信するかを決めます。この判断は設定可能です。
サブエージェントは、ネットワークマネージャと直接通信することはありません。その代わりに、マスターエージェントと通信します。サブエージェントの管理責任はマスターエージェントに委ねることができます。ただし、それを受諾するか拒否するかはマスターエージェントによって判断されます。
サブエージェントは、マスターエージェントに登録されてから、マスターエージェントからの SNMP 要求を待ちます。要求を受信すると、サブエージェントは適切な応答を返送します。さらに、サブエージェントは、SNMP トラップを送信することもできます。
サブエージェントは、4 つの主な要素で構成されます。その 4 つの要素とは、SNMP トラップ、サービス API スタック、サブエージェントアプリケーション、MIB データベースです。マスターエージェントは、SNMP のプロトコルデータユニット (PDU) の送受信を管理します。また、PDU のコード化と復号化を行います。SP (スタック) は、受け取った要求を適切にディスパッチしたり、適用可能なコールバック関数を呼び出します。
システムインタフェースモジュールは、サブエージェントによって管理されているすべての変数に対するコールバックを実装したものです。MIB コンパイラは、自動的にこの情報を生成します。
システムに依存するインタフェースと MIB データベース以外の他の構成要素は、他のサブエージェントによって再利用可能です。これらの構成要素は、ライブラリで提供されています。
サブエージェントは、サブエージェント自身の存在を知らせ、通信方法を指定します。トランスポートは、UDP が使用されます。サブエージェントが SNMP 要求を受信するポートは設定可能です。詳細については、「エージェントアクセス制御ファイル」を参照してください。ハンドシェイクプロトコルを使用して動的にこの確立処理を行うこともできます。
サブエージェントは、マスターエージェントの存在を定期的に確認します。マスターエージェントによって呼び出されていない動的サブエージェントは、マスターエージェントが実行状態であるかどうかを定期的に判断します。実行時ライブラリは、割り込みイベントによって、サブエージェントのサブツリーをマスターエージェントに登録します。
終了時には、動的サブエージェントが終了しようとしていることをマスターエージェントに知らせます。そのあと、マスターエージェントは、メモリー内のサブエージェントのテーブルからその行のエントリを削除できます。
snmpdx [-h] [-p port_number] [-r filename] [-a filename] [-c dirname] [-i filename] [-o filename] [-y] [-m GROUP|SPLIT] [-d debug_level]
コマンド行の引数を、表 3-2 に示します。
表 3-2 マスターエージェントのコマンド行引数
引数 |
説明 |
---|---|
-a filename |
アクセス制御ファイルのフルパスを指定する。デフォルトのファイルは、/etc/snmp/conf/snmdx.acl。詳しくは、「エージェントアクセス制御ファイル」を参照 |
-c dirname |
エージェントのリソースファイルが含まれているディレクトリのフルパスを指定する。 デフォルトのディレクトリは、/etc/snmp/conf |
-d debug_level |
デバッグのために使用される。debug_level (0〜4) に応じて、特定の情報を印刷する。デフォルトの debug_level は 0 |
-h |
コマンドの使用方法を表示 |
-i filename |
クラッシュ後の復旧の際にマスターエージェントによって使用される PID のフルパスを指定する。UNIX プロセス ID、ポート番号、リソース名、およびエージェント名などが含まれる。デフォルトのファイルは、/var/snmp/snmpdx.st |
-o filename |
このファイルには、(Sun Microsystems, 1.3.1.6.1.4.32) のように (enterprise_name, oid) の組み合わせを記述しておく。このファイルに基づいて、トラップのフィルタおよびプロセスの転送が行われる。デフォルトのファイルは、/etc/snmp/conf/enterprises.oid |
-m GROUP | SPLIT |
SNMP 要求の転送モードを指定する。デフォルトのモードは GROUP。2 つのモードの詳細は、「要求の送信」を参照 |
-p port_number |
ポート番号を指定する。デフォルトのポート番号は 161。 -p 1234 のように指定する |
-r filename |
マスターエージェントによって使用されるリソースファイル名のフルパスを指定する。リソースファイルには、マスターエージェントが呼び出したり、管理したりするサブエージェントについての情報を保存する。デフォルトのリソースファイルは、/etc/snmp/conf/snmpdx.rsrc。詳しくは、「エージェントリソース構成ファイル」を参照 |
-y |
マスターエージェントのプロセスを呼び出して、復旧モジュールを呼び出す際の復旧インジケータシグナル。復旧プロセスでは、前のセッションのどのサブエージェントが実行状態のままかを検出する。実行状態にないサブエージェントは、マスターエージェントによって再度起動される |