埋め込みPerlインタプリタの使用
目次
序文
Nagiosは、埋め込みPerlインタプリタを有効にしてコンパイル出来るようになりました。これはNagiosがはるかに効率的にPerlのプラグインを実行することができるので、Perlで書かれたプラグインに大きく依存している場合には興味深いものとなるでしょう。
埋め込みPerlインタプリタなしでは、Nagiosは外部コマンドとしてプラグインをフォークして、実行することによって、Perl(そして、Perl ではない)プラグインを実行します。埋め込みPerlインタプリタが使われるときは、Nagiosは単にライブラリを呼び出すことによってPerlプラグインを実行することができます。
Tip Tip: 埋め込みPerlインタプリタは、Nagiosが実行するすべてのPerlスクリプトで動作します - プラグインだけでなく。このドキュメンテーションはホストとサービスチェックのために使用されるプラグインに関して埋め込みPerlインタプリタを説明します、しかし、あなたが他のタイプの命令で使用しているかもしれない他のタイプのPerlスクリプトにあてはまります (例. notificationscripts, event handler scripts, etc.).
Stephen Daviesは、数年前に、元の埋め込みPerlインタプリタコードを寄稿しました。Stanley Hopcroftはかなり埋め込みPerlインタプリタコードを改善するのを手伝っている主要な人で、それを使う利点/欠点についてコメントしました。彼は、きちんと埋め込まれたインタプリタで動作するPerlプラグインを作成することに、いくつかの役に立つヒントもしました。
このドキュメントで"ePN"として使用されている単語は、embedded Perl Nagiosをさしています。それか、Nagios compiled with an embedded Perl interpreter のほうがよければこちらでもかまいません。
利点
ePN (embedded Perl Nagios)の有利な点には以下があります:
- NagiosはPerlプラグインをずっと少ない時間で実行出来ます。なぜなら(Perlインタプリタをロードする度に)プラグインを実行するのにフォークしないからです。代わりにライブラリコールによってプラグインを実行します。
- Perlプラグインによるシステム負荷を大きく減らし、組み込みPerl無しの時より多くのチェックが可能になります。言い換えれば、一般的に Perlより開発時間が必要と考えられている(そのかわりTCL以外は10倍速く実行出来るが)CやC++、Expect、TCLなどの他の言語でプラグインを書く魅力はなくなります。
- Cプログラマでなくても、Perlに重たい処理をさせることでNagiosを遅くさせずパフォーマンスを上げることが出来ます。しかし、インタープリターのロード時間と別でePNによってプラグインは速くならないことに注意してください。もし速いプラグインが必要なら、使っているPerlがチューニングされていて最適なアルゴリズムを用いていることを確認した後で(Benchmark.pmはPerl言語の本質的なパフォーマンス比較に欠かせません)、 XSUBs (XS)かCを検討してください。
- ePNの使用はさらにPerlを学ぶこの上無い機会です。
欠点
ePN (embedded Perl Nagios)の欠点はApacheのmod_perl (組込みインタープリター付きのApache) とそのままのApacheとを比較した場合とほぼ同じです:
- そのままのNagiosで調子良く動作するPerlプログラムはePNを使うと動かないかもしれません。動作するようにプラグインを修正する必要があります。
- ePN無しの時よりPerlプラグインのデバッグが困難になります。
- ePNはそのままのNagiosよりサイズ(メモリ消費)が大きくなります。
- あるPerlの概念は使用出来ない、または思ったのと違うように振る舞います。
- "何かをするのには複数の方法がある"ことに気づき、おもしろくなさそうであったり明白な方法を選ばなければなりません。
- Perlのより深い知識が必要になるでしょう。(しかしXSUBSを使用するプラグインでなければ、非常に難解であったりPerlの内部的なものはありません。)
埋め込みPerlインタプリタ付きでNagiosをコンパイル
Perlプラグインとスクリプトを走らせるために埋め込みPerlインタプリタを利用したいのなら、下記のことをする必要があります:
- 埋め込みPerlインタプリタを有効にし、Nagiosをコンパイルしてください (下記の指示を見てください)。
- メインコンフィグレーションファイルの enable_embedded_perl オプションを有効にしてください。
- 必要ならば、 use_embedded_perl_implicitly オプションをセットしてください。このオプションは、Perlインタプリタが個々のPerlプラグインとスクリプトをデフォルトで使うかどうかを決定します。
- 任意で、埋め込みPerlインタプリタを利用して動くことから、特定のPerlプラグインとスクリプトを使用可能または使用不可にしてください。特定の PerlスクリプトがPerlインタプリタの元で走っている問題があるならば、これは役に立つことがありえます。詳細は以下の指示を見てください。
埋め込みPerlと一緒にNagiosをコンパイル
あなたが埋め込みPerlインタプリタを利用したいのなら、埋め込みPerlインタプリタを有効にしてNagiosをコンパイルする必要があります。これは単に --enable-embedded-perl オプションをconfigureスクリプトに追加して再実行するだけです。埋め込みPerlインタプリタに内部コンパイルキャッシュをさせたいなら --with-perlcache オプションを同様につける必要があります。例:
./configure --enable-embedded-perl --with-perlcache otheroptions...
一旦あたらしいオプションをつけてconfigureスクリプトを再実行したら、Nagiosを再コンパイルしてください。
Perlインタプリタの特殊プラグインの利用
Nagios 3から始めて、プラグインまたはスクリプトを埋め込みPerlインタプリタで実行するかどうかについて指定することができます。Perlインタプリタで動作しない厄介なPerlスクリプトがあるならば、これは特に役に立ちます。
特定のperlスクリプトのために埋め込みPerlインタプリタを利用するべきかどうかを、はっきりとNagiosに指定するために、以下のエントリのうちの1つをPerlスクリプト/プラグインに加えてください...
特定のスクリプトがPerlインタプリタを利用するようNagiosに伝えるために、このラインをPerlスクリプトに加えてください:
# nagios: +epn
特定のスクリプトがPerlインタプリタを利用しないようNagiosに伝えるために、このラインをPerlスクリプトに加えてください:
# nagios: -epn
どちらの場合でも、Nagiosが設定を見つけるために、スクリプトの最初の10行目以内に記述しなければなりません。
Tip Tip: If you do not explicitly 個々のプラグインがPerlインタプリタの元で動くことができるかどうかを、Nagiosに伝えるために、上記の方法をはっきりと使用しないならば、Nagiosはその答えを決定します。 この判定のプロセスは、 use_embedded_perl_implicitly 変数によって制御されます。値が1にセットされるならば、すべてのPerlプラグイン/スクリプト(ePNを明示的に有効にしない/無効にする)はPerlインタプリタの元で動きます。値が0であるならば、Perlインタプリタの元で動きません。
埋め込みPerlとしての発展中のプラグイン
埋め込みPerlインタプリタとしての発展中のプラグインに関する情報は、 ここを見て下さい.