web-dev-qa-db-ja.com

Nagios / nrpeが「戻りコード255は範囲外です」を与える

Nagios用に次のサービスを設定しています。

define service {
  hostgroup_name             LNX
  service_description        /tmp Disk Usage
  check_command              check_nrpe!check_disk!-a '-w 20% -c 10% -p /tmp'
  check_interval             1
  max_check_attempts         3
  retry_interval             1
  check_period               24x7
  notification_interval      2
  notification_period        24x7
  notification_options       c,r,w
  notifications_enabled      0
  contact_groups             devops
}

これは次のコマンドに関連付けられます。

define command {
 command_name     check_nrpe
 command_line     $USER1$/check_nrpe -H $HOSTADDRESS$ -u -t 60 -c $ARG1$ $ARG2$
}

つまり、最終的に何が実行されているか(およびコマンドラインで実行したときの出力)は次のようになります。

$: /usr/local/nagios/libexec/check_nrpe -H <my Host> -u -t 60 -c check_disk -a '-w 20% -c 10% -p /tmp'
DISK OK - free space: /tmp 4785 MB (97% inode=99%);| /tmp=124MB;3928;4419;0;4910

これにecho $?を付けると、0が生成され、OK /成功を意味します。

ただし、nagiosはこれを「範囲外のエラーコード255」として報告しており、その理由はわかりません。

サーバーでcheck_diskコマンドを実行すると正常に動作します。

$: ./check_disk -w 20% -c 10% -p /tmp
DISK OK - free space: /tmp 4785 MB (97% inode=99%);| /tmp=124MB;3928;4419;0;4910
$: echo $?
0

上記のように、nagiosサーバーのcheck_nrpe実行可能ファイルを介して実行すると機能します。これの意味は:

  1. コマンド(check_disk)はリモートシステムにあります:command[check_disk]=/usr/local/nagios/libexec/check_disk $ARG1$
  2. Nagiosサーバーはリモートnrpeと通信できます(たとえば、ネットワーク上でアクセスでき、そのIPはonly_from/etc/xinetd.d/nrpeディレクティブに存在します)

さらに、このチェックは他のマシンでは問題なく実行されますが、すべてのマシンでは実行されません

Nagiosは、私が見ることができるすべてが0になるはずであり、したがってサービスにOKのマークを付ける必要があることを意味するのに、255を取得していると考えるのはなぜですか?

編集:NagiosのバージョンはCentOS 7で実行されているNagiosコア4で、チェックされているホストはcentos 5-7です。バージョンが異なる複数のマシンで問題が発生します

3
Mitch

次のようにcheck_commandがある場合:

check_command check_nrpe!check_disk

結び付けられたコマンド名は、クライアント側のcheck_nrpeではなく、実際にはcheck_diskです。

問題の原因

Nagiosサーバーのサービス設定は、監視対象クライアントに引数を1つ指定してcheck_diskコマンドを実行するように要求します。

-w 20% -c 10% -p /tmp

Nagiosクライアントのnrpe.cfgでのcheck_diskコマンドの現在の設定は次のとおりです。

command[check_disk]=/usr/lib64/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$

したがって、NRPEを介して監視対象クライアントに渡したコマンドは、実際には次のとおりです。

/usr/lib64/nagios/plugins/check_disk -w -w 20% -c 10% -p /tmp -c $ARG2$ -p $ARG3$

したがって、コマンドを正常に実行できないため、テストは失敗します。

ソリューション

Nagiosクライアントに3つの異なる引数を渡したい場合は、check_commandを次のように変更してみてください。

check_command check_nrpe!check_disk -a '-w 20% -c 10% -p /tmp'

Nagiosクライアントで対応するコマンドが構成されていることを確認してください:

command[check_disk]=/usr/lib64/nagios/plugins/check_disk $ARG1$

別のオプションは、次のようにサーバー構成を変更します。

check_command check_nrpe!check_disk

対応するクライアント構成:

command[check_disk]=/usr/lib64/nagios/plugins/check_disk -w 20% -c 10% -p /tmp
2
Simon MC. Cheng

Nrpeクライアントがnagiosサーバーからの接続を受け入れていることを確認する必要があります。

cat /etc/xinetd.d/nrpe
service nrpe
{
    flags           = REUSE
    socket_type     = stream
    port            = 5666
    wait            = no
    user            = nagios
    group           = nagios
    server          = /usr/local/nagios/bin/nrpe
    server_args     = -c /usr/local/nagios/etc/nrpe.cfg --inetd
    log_on_failure  += USERID
    disable         = no
    only_from       = xxx.xxx.xxx.xxx
}

Only_from行にnagios IPがあることを確認します

次に、check_nrpeスクリプトに適切な権限があることを確認する必要があります。 nagios:nagiosが所有する必要があります

-rwxrwxr-x. 1 nagios nagios 81542 Jul 11 13:08 /usr/local/nagios/libexec/check_nrpe
0
xguru