序文
Stephen Daviesによって寄与されたコードにより、Nagiosは組み込みPerlインタプリタを有効にしてコンパイル出来るようになりました。Perlで書かれたプラグインに大きく依存している場合には興味深いものとなるでしょう。
Stanley Hopcroftはほんの少し組み込みPerlの作業をし、その使用による有利不利を書き記しました。また彼は適切に動作する組み込みPerlによる Perlプラグインの作成に関して、いくつかの役に立つヒントも与えました。このドキュメントの大部分は彼の解説によっています。
このドキュメントで"ePN"として使用されている単語は、embedded Perl Nagiosをさしています。それか、Nagios compiled with an embedded Perl interpreter のほうがよければこちらでもかまいません。
利点
ePN (embedded Perl Nagios)の有利な点には以下があります:
欠点
ePN (embedded Perl Nagios)の欠点はApacheのmod_perl (組込みインタープリター付きのApache) とそのままのApacheとを比較した場合とほぼ同じです。
対象となる読者
Perlプラグイン(ePNやそれ以外)を開発する時にすべき事
ePNのPerlプラグインを開発するのにしなければならない事
my $data = <<DATA;
portmapper 100000
portmap 100000
sunrpc 100000
rpcbind 100000
rstatd 100001
rstat 100001
rup 100001
..
DATA
%prognum = map { my($a, $b) = split; ($a, $b) } split(/\n/, $data) ;
turn this into
my $x = 1 ; my $x = 1 ;
sub a { .. Process $x ... } $a_cr = sub { ... Process $x ... } ;
. .
. .
a ; &$a_cr ;
$x = 2 $x = 2 ;
a ; &$a_cr ;
# anon closures __always__ rebind the current lexical value
一般的な本(オライリーやダミアン・コンウェイの"オブジェクト指向Perl"など)から便利な情報を持たせましょう。しかし本当に大事な事は http://perl.apache.org/guide/にあるStas Bekmanのmod_perlガイドの良いテキストに記載されています。
このすばらしい本サイズのドキュメントはNagiosに関しては何も記載されていませんが、Apacheで埋め込みPerlのプログラムを書く事について記載されています(例 Doug MacEachernsのmod_perlの項)。
埋め込みperlのマニュアルはコンテキストと奨励が不可欠である。
基本的にLincoln Stein と Doug MacEachern はPerlと埋め込みPerlに関して知っており、彼らの著書'Writing Apache Modules with Perl and C'は一見の価値があります。
'Embed::<あなたのプラグインに関係する何とかいう名前%gt;'というパッケージ中に ある'hndlr'と呼ばれるサブルーチンとしてp1.plが書き直したプラグインを見る事ができます
あなたのプラグインは@ARGVにあるコマンドライン引数を予測してp1.plもまた@_を@ARGVに渡します。
これは'eval'する事でエラー(どんなパースエラーと実行エラー)を出力するなら返り値を得られ、 プラグインは投げ出されます。
以下の出力はテストePNによって変形したcheck_rpcプラグインが実行される前にどのように働いているかの出力です。 (実際のプラグインのコードの殆どは見る事ができず、我々はePNがプラグインにもたらす変化にだけ着目します)。 わかりやすく、変更点は赤字で表してます:
package main;
use subs 'CORE::GLOBAL::exit';
sub CORE::GLOBAL::exit { die "ExitTrap: $_[0]
(Embed::check_5frpc)"; }
package Embed::check_5frpc; sub hndlr { shift(@_);
@ARGV=@_;
#! /usr/bin/perl -w
#
# check_rpc plugin for Nagios
#
# usage:
# check_rpc host service
#
# Check if an rpc serice is registered and running
# using rpcinfo - $proto $host $prognum 2>&1 |";
#
# Use these hosts.cfg entries as examples
#
# command[check_nfs]=/some/path/libexec/check_rpc $HOSTADDRESS$ nfs
# service[check_nfs]=NFS;24x7;3;5;5;unix-admin;60;24x7;1;1;1;;check_rpc
#
# initial version: 3 May 2000 by Truongchinh Nguyen and Karl DeBisschop
# current status: $Revision: 1.5 $
#
# Copyright Notice: GPL
#
... プラグインのコードの残りはここで(割愛します) ...
}
埋め込みPerlインタプリタ付きでNagiosをコンパイル
さて、一休みできますね。まだNagiosを埋め込みPerlインタプリタ付きでコンパイルしたいですか? ;-)
埋め込みPerlインタプリタ付きでNagiosをコンパイルしたいなら、 configureスクリプトに--enable-embedded-perlオプションをつけて再実行する必要があります。 埋め込みPerlインタプリタに内部コンパイルキャッシュをさせたいなら、 --with-perlcacheオプションを同様につける必要があります。例:
./configure --enable-embedded-perl --with-perlcache ...他のオプション...
一旦あたらしいオプションをつけてconfigureスクリプトを再実行したら、Nagiosを再コンパイルしてください。 Nagiosが埋め込みPerlインタプリタ付きでコンパイルされた事を確認する為、コマンドラインから-mオプション をつけて実行して確認できます。 コマンドラインで実行した出力から以下のような出力が得られます (埋め込みPerlインタプリタはオプション部分にリストされる事に注意して下さい):
[nagios@firestore ]# ./nagios -m Nagios 1.0a0 Copyright (c) 1999-2001 Ethan Galstad (nagios@nagios.org) Last Modified: 07-03-2001 License: GPL External Data I/O ----------------- Object Data: DEFAULT Status Data: DEFAULT Retention Data: DEFAULT Comment Data: DEFAULT Downtime Data: DEFAULT Performance Data: DEFAULT Options ------- * Embedded Perl compiler (With caching)