Nagios-Logo
NRPEというプラグインモジュールを使うと、Nagiosでゲスト側の細かい監視 データを採取できるようになります(エージェント動作)。今回は、Nagiosが動いている監視サーバとは別のサーバ(ゲスト側)でNRPEエージェント を稼働させ、ゲスト側のログからある特定のキーワードを見つけると障害発生(アラート)とする設定例を書いてみます。

 サマリー

1.ゲスト側の設定

・NRPEのインストール
・Nagios本体から呼び出される監視モジュールの設定
・root権限が必要な場合の設定
・単体テスト

2.ホスト側の設定

・必要なプラグインがあるかの確認と必要であればインストール
・ゲスト側の監視モジュールをNRPE経由でテスト
・Nagiosの各種設定
・動作確認

 検証に使った環境
ゲスト側                      192.168.0.151
    Debian GNU Linux 6.0.3 squeeze
    kernel                    2.6.32-5-686
    nagios-nrpe-server        2.12-4
    nagios-plugins            1.4.15-3squeeze1
    nagios-plugins-basic      1.4.15-3squeeze1
    nagios-plugins-standard   1.4.15-3squeeze1
Nagiosホスト側                192.168.0.152
    Debian GNU Linux 6.0.3 squeeze
    kernel                    2.6.32-5-686
    nagios3                   3.2.1-2
    nagios-plugins            1.4.15-3squeeze1
    nagios-plugins-basic      1.4.15-3squeeze1
    nagios-plugins-standard   1.4.15-3squeeze1
    nagios-nrpe-plugin        2.12-4

それではゲスト側から作業を開始します。

 NRPEのインストール

aptitude install nagios-nrpe-server

このコマンドでNRPEエージェントと必要なNagiosプラグイン一式が全てインストールされ、自動的にエージェントはデーモンとして動作を始めます。デフォルトでは localhost からしか接続を受け付けないので、/etc/nagios/nrpe.cfg の設定を変更します。

allowed_hosts=127.0.0.1

となっているので、NagiosホストのIPアドレスを追加します。

allowed_hosts=127.0.0.1,192.168.0.152 ←例:152がNagiosホスト

設定を変更したら、/etc/init.d/nagios-nrpe-server restart を忘れずに!

 Nagios本体から呼び出される監視モジュールの設定

/etc/nagios/nrpe.d/ にNagiosホストから呼び出されるコマンドの登録を行います。
今回は Log をチェックして”ERR”という単語がある行を見つけたらクリティカル(致命的)なエラーだと検出する方法です。

/usr/lib/nagios/plugins/check_log -F /var/log/messages -O /tmp/.messages_old -q ERR

これには check_log というプラグインを使います。このプラグインは呼び出される度に、-F で指定されたファイルを -O で指定されたファイルと比較してdiffを取ります。その差分の中に指定されたキーワードがあるか調べて結果を返します。その後、-F で指定したフィルを -O のファイルへコピーします。
※ですから、一番最初に呼ばれた時には -O のファイルは無いので単にファイルをコピーするだけの動作を行います。

このプラグインの動作を確認して正常に作動しているなら、下記内容を check_log.cfg と名前を付けて /etc/nagios/nrpe.d/ に置きます。

command[check_log]= sudo /usr/lib/nagios/plugins/check_log -F /var/log/messages
 -O /tmp/.messages_old -q ERR

 root権限が必要な場合の設定

NRPEは実行時にnagiosというユーザで実行されます。今回は /var/log 以下のファイルを読むのでroot権限がないとファイルが読めません。そのため、sudo で実行出来るように設定します。

visudo を実行して、最下行に
nagios ALL=NOPASSWD:/usr/lib/nagios/plugins/check_log
を追加して下さい。
※ もし visudo を実行したときになにやらエラーを起こすときは、自動起動する nano というエディターのインストールに問題がある場合です。 aptitude purge nano と一度きれいに消してから、aptitude install nano と再インストールしてみて下さい。だいたい、これで治ります。

 単体テスト

sudo -u nagios sudo /usr/lib/nagios/plugins/check_log -F /var/log/messages
 -O /tmp/.messages_old -q ERR

…と、実行して動作を確認して下さい。

以上でゲスト側(監視される方)の設定は終了です。
次にNagiosが動いているホスト側の設定に移ります。

 必要なプラグインの確認

NRPE を一度も使っていないのであれば、NRPE のプラグインのインストールが必要です。
aptitude install nagios-nrpe-plugin
を実行し、/etc/nagios-plugins/config/ に下記ファイルを作成しましょう。

/etc/nagios-plugins/config/nrpe.cfg
# check nrpe
define command{
 command_name  check_nrpe
 command_line  /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
 }

 ゲスト側の監視モジュールをNRPE経由でテスト

それではNRPE経由で監視情報がとれるかチェックしてみます。

/usr/lib/nagios/plugins/check_nrpe -H 192.168.0.151 -c check_log

-H は NRPE が動作している被監視サーバを指定します(名前でも可)。
-c は1-2.で設定したコマンド名を指定します。

何も問題がなければ、Log check ok – 0 pattern matches found という表示が出るはずです。

 Nagiosの各種設定

/etc/nagios3/conf.d/services_nagios2.cfg

# check log
define service {
       hostgroup_name        check_log
       service_description   LOG check
       check_command         check_nrpe!check_log
       use                   generic-service
       max_check_attempts    1
       retry_interval        1
       }

【注意】 ゲスト側で実行される chek_log というプラグインは、異常を検知しても通知されるのは1回きりです。しかし、Nagios のデフォルト設定は連続で4回エラーが発生しないと通知メールが発行されませんので設定を少し追加します。

上記の max_check_attempts がその為の設定で、これは1回でもエラーが発生すると通知を発行します(つまり、デフォルトはこの値が4になっている)。また、エラー通知状態になった後のチェックは1分間隔とするのが次の retry_interval の指定です。正常な状態に復帰するとデフォルト5分間隔のチェックに戻ります。

そして、/etc/nagios3/conf.d/hostgroups_nagios2.cfg に、

define hostgroup {
             hostgroup_name  check_log
             alias           Log
             members         server01   ←被監視サーバ 192.168.0.151
             }

を追加すればNagios側の設定は終了です。

 動作確認

しばらく放置して Log の状況やわざと ERR を起こしてみてちゃんとエラーメールが飛ぶかどうか動作を確認して下さい。