序論
組込Perlインタプリタをサポートした形でNagiosをコンパイルできます。 これが無い場合に比べてはるかに効率的にNabiosがPerlプラグインを実行します、それゆえPerlでかかれた重いプラグインに頼るあなたにとって、興味深いかもしれません。
組込Perlインタプリタがなければ、Nagiosは、外部のコマンドとしてプラグインをフォークして、実行することによって、Perl(そして、Perl以外)のプラグインを実行します。 組込Perlインタプリタが使われると、Nagiosは単純にライブラリを呼び出してPerlプラグインを実行できます。
チップ: 組込PerlインタプリタはNagiosが実行するすべてのPerlスクリプトで働いています--プラグインだけではない。 このドキュメントはホストとサービスチェックに使用されるプラグインと関連して組込Perlインタプリタについて議論します。しかし、それは他のタイプの コマンドに使用しているかもしれない他のタイプのPerlスクリプト(例えば、通知スクリプト、イベントハンドラ・スクリプトなど)に当てはまります。
スティーブン・デイヴィースはオリジナルの組込Perlインタプリタ・コードを数年前に寄付しました。 スタンリー・ホップクロフトは、組込Perlインタプリタ・コードを大きく改良するのを助ける第一人者であり、それを使用する利点と欠点をコメントしました。 また、彼は組込インタプリタで動作するPerlプラグインを作成するとき役立つ幾つかのヒントを与えました。
このドキュメントで使用される"ePN"が組込Perl Nagiosを示すことに注意してください、それは組込Perlインタプリタと共にコンパイルされたNagiosです。
利点
ePN(embedded Perl Nagios)のいくつかの利点は:
- Nagiosはもう、プラグインを実行するのにforkしないので(その都度Perlインタプリタをローディングしないので)、Perlプラグインを動かすのにずっと少ない時間しか使いません。 代わりに、ライブラリの呼出を行ってプラグインを実行します。
- それは、Perlプラグインのシステム影響を大きく減少させ、そして/または、そうで無い場合可能なPerlプラグインの実行回数を増やす事ができます。 言い換えれば、あなたには、一般に、開発時間がPerlより少なくとも1桁遅くなると言われるC/C++、またはExpect/TCLなどの他の言語でプラグインを書くのは弱い動機です。(約10倍速く実行しますが - TCLは例外)。
- あなたがCプログラマでなければ、Nagiosを遅くせずにすべての力仕事をPerlにさせる事によってNagiosからの膨大な量のマイル数を得る事ができます。 しかしながら、ePNがあなたのプラグインを早くしない事に注意します。(インタプリタ・ロード時間を除くことは別として) 速いプラグインが欲しいなら、Perlが調整されていて、適当なアルゴリズムを使ったと(Perl言語要素の性能を比較するのに、Benchmark.pmは非常に有用です)確信した後、Perl XSUBsが(XS)、またはCを考えます。
- ePNを使用するのは、Perlに関して少し学ぶ素晴らしい機会です。
難点
ePN(組込Perl Nagios)の難点はアパッチ・mod_perl(すなわち、組込インタプリタがあるアパッチ)が通常のアパッチと比較されたのに似たり寄ったりです:
- 普通のNagiosでうまく動作するPerlプログラムは、ePNで動作しないかもしれません。 それらに扱わせるあなたのプラグインを変更しなければならないかもしれません。
- Perlプラグインは、通常のNagios環境下よりePN下ではデバッグしにくいです。
- ePNには、通常のNagiosより大きいSIZE(メモリーフットプリント)が必要とします。
- いくつかのPerlでできた物の幾つかは、使えないか、また予想と異なって動くかもしれません。
- 'それをする1つ以上の方法'を意識して、はっきり魅力的でないのもを選ばなければならないかもしれません。
- より多くのPerl知識を必要とします(Perl内部について非常に難解でややこしくはありません--プラグインにXSUBSをしない限り)。
組込Perlインタプリタの使用
Perlプラグインとスクリプトを動かすのに組込Perlインタプリタを使用したいと思うなら、ここに、行う必要があることがあります:
- 組込PerlインタプリタのサポートがあるNagiosをコンパイルします(以下での命令を見ます)。
- メイン設定ファイルのenable_embedded_perl オプションを許可
- use_embedded_perl_implicitly オプションを設定し、あなたの要求に合わせます。 このオプションは、Perlインタプリタが個々のPerlプラグインとスクリプトにデフォルトで使われるかどうか決定します。
- オプションで組込Perlインタプリタを使用することで実行できるPerlプラグインとスクリプトを許可するか、禁止します。 あるPerlスクリプトがPerlインタプリタの下で実行するのに問題があるなら、これは役に立つ場合があります。 これを行う詳しい情報は以下での命令を見ます。
組込Perlと一緒にNagiosをコンパイルします。
組込Perlインタプリタを使用したいなら、最初に、それのサポートがあるNagiosをコンパイルする必要があります。 これをするために、単に configure スクリプトを --enable-embedded-perl オプションを付けて実行します。 組込インタプリタに内部的にコンパイルされたスクリプトをキャッシュして欲しいなら、--with-perlcache オプションをまた加えます。 例:
./configure --enable-embedded-perl --with-perlcache otheroptions...
新しいオプションでスクリプトを設定して、configを再実行し、Nagiosを必ず再コンパイルします。
Perlインタプリタのプラグイン特有の用法
Nagios3とから、どのPerlプラグインやスクリプトが組込Perlインタプリタの下で動かされるべきかそうでないかを指定できます。 Perlインタプリタでうまくいかない厄介なPerlスクリプトが、ありましたらこれは特に役に立ちます。
特定のPerlスクリプトに組込Perlインタプリタを使用するかどうか明確にNagiosに指定するため、Perlスクリプト/プラグインに以下の1つのエントリーを追加します…
特定のスクリプトにPerlインタプリタを使用するようにNagiosに指定するには、この行をPerlスクリプトに追加します:
# nagios: +epn
特定のスクリプトに組込Perlインタプリタを使用しないようNagiosに指定するは、この行ををPerlスクリプトに追加します:
# nagios: -epn
Nagiosがそれを検出できる様に、どちらの行もスクリプトの最初の10行の中に位置しなければなりません。
チップ: Perlインタプリタの下で個々のプラグインを実行する否かを上の方法使って明確にNagiosに指定しないと、Nagiosはあなたのために行うと決めます。 この決定の過程はuse_embedded_perl_implicitly 変数で制御されます。 値が1に設定されると、すべてのPerlプラグイン/スクリプト(それは、明らかにePNを有効にするか、または無効にしない)がPerlインタプリタので実行されます。 値が0であれば、それらはPerlインタプリタの下で実行されません。
組込Perlを使うプラグインの開発
ここに組込Perlインタプリタを使ってプラグインを開発する情報を見つけることができます。