クイック エンジニアリングブログ

株式会社クイック Web事業企画開発本部のエンジニアリングチームが運営する技術ブログです。

nagiosのnrpeのログが途中で切れたときの対処

こんにちは、インフラ担当のmatsBです。
最近ヒゲを伸ばし始め、ヒゲ道は奥が深いと感じています。



今回は
nagios+nrpe+check_log3.plでログ全文を出す試み
を書きたいと思います。



弊社では一部のサービス監視としてNagiosを使用しています。
messagesやApacheのログ監視をcheck_log3.plで行っていますが、全文を表示させようと思っても途中で切れていることがあります。
これはメールでもですし、管理画面でも本文の途中で切れます。



前提

前提としてyumで入れたままだと変更できないので、少し工夫が必要です。
sourceを取ってきてnrpeをコンパイルしなおさなくてはいけないです。



環境

監視サーバと監視クライアントのOSはCentOS 6系です。
すでにyumnagiosとnrpeをインストールしています。
パッケージで入れたもの(cfgファイル等)はそのまま流用しています。

そのため、makeでコンパイルした後にmake installはせず、バイナリーファイルの配置は手動でしています。


nrpeのsourceの修正箇所

監視クライアント側

include/common.h 内の MAX_INPUT_BUFFER
include/common.h 内の MAX_PACKETBUFFER_LENGTH

監視サーバ側

include/common.h 内の MAX_PACKETBUFFER_LENGTH




監視クライアント側のnrpe作業

ますは監視クライアント側で「most buffers」のMAX値と「one query/response」のMAX値を増やします。
※値は結構適当につけています。

[root@nagios-client ~]# wget http://hogehoge.fuga/nrpe-2.15.tar.gz
[root@nagios-client ~]# tar zxvf nrpe-2.15.tar.gz
[root@nagios-client nrpe-2.15]# cd nrpe-2.15
[root@nagios-client nrpe-2.15]# vim include/common.h
~中略~
//#define MAX_INPUT_BUFFER        2048
// ↓ に変更
#define MAX_INPUT_BUFFER        20480

~中略~
//#define MAX_PACKETBUFFER_LENGTH       1024 
// ↓ に変更
#define MAX_PACKETBUFFER_LENGTH       10240

[root@nagios-client nrpe-2.15]# ./configure --prefix=/etc/nagios --enable-command-args
[root@nagios-client nrpe-2.15]# make

※configure に --enable-command-argsを入れているのは、nrpeがコマンド引数を有効にするためです。これを入れずにコンパイルしてnrpe.cfg 内で"dont_blame_nrpe=1"を入れても引数が無効になります。




これで出来たnrpeのバイナリーファイルを使用すれば、、、、

[root@nagios-client nrpe-2.15]# mv /usr/sbin/nrpe /usr/sbin/nrpe_yum
[root@nagios-client nrpe-2.15]# cp src/nrpe /usr/sbin/nrpe
[root@nagios-client nrpe-2.15]# /etc/init.d/nrpe restart
[root@nagios-client nrpe-2.15]# /usr/lib64/nagios/plugins/check_log3.pl -l /var/log/httpd/access_log -s /etc/nagios/seeks/access_log.seek -f /etc/nagios/pattern/access_log_exclude -P /etc/nagios/pattern/access_log_pattern -c 1
CRITICAL: Found 127 lines (limit=1/1): (1) 192.168.255.255 - - [17/Feb/2016:11:06:30 +0900] GET /
(2) 192.168.254.254 - - [17/Feb/2016:11:06:30 +0900] GET /
(3) 192.168.254.254 - - [17/Feb/2016:11:06:30 +0900] GET /
~中略~
(126) 192.168.254.254 - - [17/Feb/2016:11:06:30 +0900] GET /
(127) 192.168.254.254 - - [17/Feb/2016:11:06:30 +0900] GET /

とまぁ、こんな感じで出てきます。
監視クライアント側は以上です。




監視サーバ側のnrpe作業

つづいて監視サーバ側で「one query/response」のMAX値を増やします。
※値は結構適当につけています。

[root@nagios-server ~]# wget http://hogehoge.fuga/nrpe-2.15.tar.gz
[root@nagios-server ~]# tar zxvf nrpe-2.15.tar.gz
[root@nagios-server ~]# cd nrpe-2.15
[root@nagios-server nrpe-2.15]# vim include/common.h
~中略~
//#define MAX_PACKETBUFFER_LENGTH       1024
// ↓ に変更
#define MAX_PACKETBUFFER_LENGTH       10240

[root@nagios-server nrpe-2.15]# ./configure --prefix=/etc/nagios --enable-command-args
[root@nagios-server nrpe-2.15]# make


これで出来たcheck_nrpeのバイナリーファイルを使用すれば、、、、

[root@nagios-server nrpe-2.15]# cp src/check_nrpe /etc/nagios/libexec/check_nrpe_MAX_PACKETBUFFER_LENGTH
[root@nagios-server nrpe-2.15]# /etc/nagios/libexec/check_nrpe_MAX_PACKETBUFFER_LENGTH -H 192.168.254.254 -c check_access_log
CRITICAL: Found 127 lines (limit=1/1): (1) 192.168.255.255 - - [17/Feb/2016:11:06:30 +0900] GET /
(2) 192.168.254.254 - - [17/Feb/2016:11:06:30 +0900] GET /
(3) 192.168.254.254 - - [17/Feb/2016:11:06:30 +0900] GET /
~中略~
(126) 192.168.254.254 - - [17/Feb/2016:11:06:30 +0900] GET /
(127) 192.168.254.254 - - [17/Feb/2016:11:06:30 +0900] GET /

と、監視サーバまでログ全文が送られるようになりました。




ここまでで一通りの作業は終わりですが、メールでアラートを受取っている場合、基本的に一行で終わってしまいます。
そのため、検知のコマンドを変更する必要があります。



監視サーバ側のNagios作業

メールで全文表示するため、command_line内に$LONGSERVICEOUTPUT$を追加
全文表示用のcheckコマンドの定義を設定

[root@nagios-server ~]# vim /etc/nagios/etc/objects/commands.cfg
~中略~
define command{
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n\n$LONGSERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
        }
~中略~
define command{
        command_name    check_nrpe_MAX_LENGTH
        command_line    $USER1$/check_nrpe_MAX_LENGTH -H $HOSTADDRESS$ -c $ARG1$
        }

監視サーバ側のコマンドも変更して再起動

[root@nagios-server ~]# vim /etc/nagios/etc/servers/server.cfg
~中略~
define service{
        use                             generic-security
        host_name                       server
        service_description             access_log check
        check_command                   check_nrpe_MAX_LENGTH!check_access_log
        }
[root@nagios-server ~]# /etc/init.d/nagios restart


これで、監視クライアントのnrpeから検知後のメールまでの設定が完了です。
手順自体はそんなにややこしくないけれど、覚えておくのは面倒ですね。


Nagiosでログを全文出したくなった方は、是非お試しください!