NRPE (NetSaint Remote Plugin Executor)


(1)コンパイル
ダウンロードしたnrpe-1.2.5.tar.gz を適当なディレクトリに展開し、約束どおりのコマンドでコンパイルは終了です。(なんと簡単な。)

   # tar xvzf nrpe-1.2.5.tar.gz
   # cd  nrpe-1.2.5
   # ./configure
   # make all

そして、(nrpe-1.2.5)/src というディレクトリに作成された nrpecheck_nrpe が目的のバイナリファイルです。
左図のように、この nrpe をリモートホスト上で実行し、check_nrpe をNetSaintを稼動させているホスト上で実行することになります。

リモートホスト上でNetSaintを稼動させておく必要はありませんが、NetSaintのプラグイン(check_procs、check_disks、check_users、check_load等)が必要となりますので、リモートホストにもNetSaintをインストールしておくようにしましょう。

また、注意しなければならないのは、nrpe と check_nrpe はそれぞれ違うホスト上で実行するわけですから、各々のマシンでコンパイルしなければなりません。



(2)インストール
まず、NetSaintを稼動させているホストへのインストールは、作成した check_nrpe をNetSaintで使用している他のプラグイン(check_ping等)と同じディレクトリ(デフォルトでインストールしている場合は、/usr/local/netsaint/libexec )にコピーするだけです。
   # cp  src/check_nrpe  /usr/local/netsaint/libexec/

また、リモートホスト上では、そのマシンでコンパイルした nrpe とnrpeの設定ファイルである nrpe.cfg を適当な場所にコピーします。
今回は、リモートホスト上にもNetSaintをインストールしておくことにしていますので、それぞれを /usr/local/netsaint/libexec と /usr/local/netsaint/etc のディレクトリにコピーします。
  # cp  (リモートホスト上でコンパイルした)nrpe  (リモートホスト上の)/usr/local/netsaint/libexec/
  # cp  (リモートホスト上でコンパイルした)nrpe.cfg  (リモートホスト上の)/usr/local/netsaint/etc/


(3)リモートホストでの各種設定
それでは、リモートホスト上でnrpe をxinetd の下で実行するのに必要な各種設定を行います。

まず、インストールした nrpe.cfg の内容を見てみましょう。

####################################################
# Sample NRPE Config File
# Written by: Ethan Galstad (netsaint@netsaint.org)
#
# Last Modified: 03/30/2000
####################################################

           <  一 部 省 略  >
#
# Note: Any plugins that are used in the command lines must reside
# on the machine that this daemon is running on! The examples below
# assume that you have plugins installed in a /usr/local/netsaint/libexec
# directory.

command[check_users]=/usr/local/netsaint/libexec/check_users 5 10
command[check_load]=/usr/local/netsaint/libexec/check_load 5 10 15 20 25 30
command[check_disk1]=/usr/local/netsaint/libexec/check_disk 80 95 /dev/hda1
command[check_disk2]=/usr/local/netsaint/libexec/check_disk 80 95 /dev/hdb1
command[check_zombie_procs]=/usr/local/netsaint/libexec/check_procs 5 10 Z
command[check_total_procs]=/usr/local/netsaint/libexec/check_procs 150 200

最後のところに、具体的なプラグインのフォーマットが記述されていますが、必要に応じてインストールしたリモートホストで使えるよう修正しましょう。

各プラグインの引数については、
   #  /usr/local/netsaint/libexec/check_users  --help
とすれば意味が表示されるので参考にしてください。


さて、nrpe は 5666番のポートを使用し、TCPを使ってデータのやりとりをおこないます。
そこで、リモートホストの /etc/services のファイルに次の内容を追加します。
   nrpe      5666/TCP        # NRPE

これを追加しておかないと、後で xinetd をリスタートさせても nrpe が正しく動きませんので注意してください。
なお、ポート番号については、空いている番号であれば任意の番号を使うこともできます。

次に、下記の内容で nrpe というファイルを /etc/xinetd.d/ ディレクトリに作成します。

   #  default: on
   #  description: NRPE
   service  nrpe
   {
        disable          =  no
        flags             =  REUSE
        socket_type   =  stream
        wait              =  no
        user              =  netsaint
        server           =  /usr/local/netsaint/libexec/nrpe
        server_args    =  -i  /usr/local/netsaint/etc/nrpe.cfg
        log_on_failure  +=  USERID
        only_from       =  NetSaint ServerのIPまたはドメイン
   }

以上で、リモートホスト上の設定が終了しましたので、xinetd をリスタートさせます。
   # /etc/init.d/xinetd restart

リスタート後、nrpeが正しくxinetd に登録されたかを確認しましょう。
   # tail  /var/log/messages

として、
   Oct 14 12:57:19 ms12 xinetd[29696]: Unknown service: nrpe/tcp

という表示があった場合、nrpeが正しく登録されていませんので、もう一度設定した内容を見直すことにしましょう。(正しく登録された場合には、特に表示はありません。)


なお、xinetd でなく inetd を使用している場合には、/etc/inetd.conf ファイルに次の内容を追加します。
   nrpe  stream  tcp  nowait netsaint /usr/sbin/tcpd
                               /usr/local/netsaint/libexec/nrpe  -i  /usr/local/netsaint/etc/nrpe.cfg
                                          (実際には、1行で記入します。)

また、/etc/hosts.deny に次の内容を追加します。
   nrpe:      ALL  EXCEPT NetSaint ServerのIPまたはドメイン



(4)NetSaint側(ローカルホスト)の設定
まずは、check_nrpe というコマンドの登録です。
/usr/local/netsaint/etc/hosts.cfg の「COMMAND CONFIGURATION」のところに、以下の行を追加します。

  command[check_nrpe]=/usr/local/netsaint/libexex/check_nrpe $HOSTADDRESS$ -c $ARG1$

$HOSTADDRESS$にはターゲットとなるリモートホストのIPアドレスが、$ARG1$にはリモートホスト上で実行するローカルプラグイン(check_procs、check_users等)がセットされます。

なお、私の環境では、このコマンドの登録を /usr/local/netsaint/etc/command.cfg ファイルに行った場合、うまく作動しませんでしたので注意してください。

次に、「SERVICE CONFIGURATION」のところで、ターゲットとなるリモートホストに対して実行するローカルプラグインを定義します。
以下に例を示します。

service[remote]=Users;0;24x7;3;5;1;admins;120;24x7;0;0;0;;check_nrpe!check_users
service[remote]=CPU;0;24x7;3;5;1;admins;120;24x7;0;0;0;;check_nrpe!check_load
service[remote]=HDA1;0;24x7;3;5;1;admins;120;24x7;0;0;0;;check_nrpe!check_disk1
service[remote]=HDB1;0;24x7;3;5;1;admins;120;24x7;0;0;0;;check_nrpe!check_disk2
service[remote]=Total Proc;0;24x7;3;5;1;admins;120;24x7;0;0;0;;check_nrpe!check_total_procs
service[remote]=Zombie Proc;0;24x7;3;5;1;admins;120;24x7;0;0;0;;check_nrpe!check_zombie_procs

以上でNetSaint側の準備もできました。
新しい設定を有効にするためにNetSaintを再起動させれば完了です。

実際には、稼動しているNetSaintを一旦ストップし、起動テスト( pre-flight check )を行ってから、スタートさせましょう。



さて、せっかくNRPEが動くようになったところですが、NRPEの場合データのやりとりを平文で行っているため、セキュリティ面で少々問題があります。

そこで、NetSaintサーバーとリモートホスト間のデータを暗号化してやりとりする NRPEP(NetSaint Remote Plugin Executor/Perl) がありますので、こちらを使うようにしたほうがいいでしょう。(~_~;)


back HOME