プラグイン開発において考慮すべき点
概要
プラグインにより Pandora は、複雑な処理を必要とするものや、複雑なシステムや API を利用する必要のある情報収集を実行することができます。プラグインの例をあげると、複雑な処理が必要な Oracle データベースのモニタリングや、何らかの自動検出処理があります。他には、Goliat (ウェブサーバチェック) が実行できないような簡単な HTML のパースができます。
実装とパフォーマンスの違い
Pandora のプラグイン実行には、ソフトウエアエージェントでの実行とサーバでの実行の二種類があります。
サーバプラグインは、収集する情報ごとに個々に実行されます。サーバプラグインの実行は、重くなく、一つの種類の情報を取得するのを簡単な処理にする必要があるため、とても難しいです。特定の HTML をパースするプラグインは、多くの処理を実装せずにサーバに負荷をかけないようにする必要があります。
エージェントプラグインは、同時に複数のモジュールの情報を取得することができます。このことにより、サーバプラグインよりより柔軟性があります。一つの情報を取得するのに多くの処理が必要なプラグインに適しています。そのため、同時に複数のモジュールの値を返すことができ、開発者にとってより柔軟性があります。
自動検出処理
プラグインで自動検出処理を実行するには、次の二種類の方法があります。
一つは、Pandora サーバの自動検出サーバを利用しての構成です。これを行うには、特定の技術や状況に応じてアドホックなコードを作成する必要があります。自動検出処理は、Pandora サーバに負荷を与えます。そのため、大量のデータ処理が必要な場合は、この選択枝は考えるべきではありません。
エージェントプラグインを用いても自動検出処理を作成することができます。通常、エージェントプラグインは、Pandora サーバに対して送信する XML に記載されたモジュールを返します。しかし、エージェントのインストールと一緒にプラグインをインストールし、tentacle も入っていれば、Pandora サーバに XML を送信することができます。自動検出処理をエージェントプラグインから実行するには、この方法を利用することができます。さらに、通常のプラグインの実行と同じように、モジュールを追加します。自動検出処理が実行するように、エージェントの更新情報を Pandora へ XML で送信するようにプラグインを用意します。
プラグインにより平均的なモジュールの作成および情報収集を行ったり、必要に応じて他のエージェントをシミュレートするXMLを作成して送信するという考え方です。
XML でデータを送信するプラグインを作成する理由は、自動検出処理の負荷をサーバに集中させずに分散することにあります。
サーバプラグインとエージェントプラグイン
サーバプラグインは次のような場面で利用すべきです。
- 実行負荷が小さい場合。例えば単純な処理など。
- 自動検出処理のデータ処理量が少ない場合。
- 自動検出処理の実行間隔が長い場合。例えば、1週間に一度など。
エージェントプラグインは次のような場面で利用すべきです。
- 情報収集において多くの処理がある場合。
- 自動検出処理で高い負荷がかかる場合。
- 自動検出処理の実行間隔が通常のエージェントの実行間隔に近い場合。例えば、5分間隔など。
開発における標準化
すべてのプラグインを可能な限り標準化し、同様の機能を持たせるには、次の点を考慮する必要があります。
プラグインと拡張のバージョン管理
Pandora FMS では、次の形式のプラグインのバージョンシステムに従います。
v1r1
ここで:
- vX: プラグインのバージョンです。新しい重要な機能が追加されたり、プラグインが正常動作しないような不具合が修正されたりしたときに、あるバージョンから別のバージョンへあげられます。最初のバージョンは v1 です。
- rY: プラグインのリビジョンです。
あるリビジョンから別のリビジョンへの変更は、バグが修正されたとき、またはマイナーな機能が実装されたときに行われます。 最初のリビジョンは r1 です。
常に最初のリビジョンから開始し、新しいバージョンへ変更していく必要があります。つまり、バージョン v1r5 のプラグインに対して、より新しいバージョンを定義したい場合は、v2r1 などになります。
使い方とプラグインのバージョン
すべてのプラグインは、パラメータなし、またはオプション -h または –help を使用した呼び出しに応答し、実行用のコマンドとそのさまざまなパラメータを表示する必要があります。さらに、プラグインのバージョンを表示する必要があります。 例えば:
$ ./myplugin myplugin version: v1r1 Usage myplugin <param1> <param2> <param3>