web-dev-qa-db-ja.com

Nagioscheck_procs状態フィルター

私はUbuntu14.04を使用していて、実行しようとしています

_/usr/lib/nagios/plugins/check_procs -C rsyslogd -w 1:3 -c 1:5 -s S_

そしてそれは戻ります

_PROCS CRITICAL: 0 processes with command name 'rsyslogd', STATE = S | procs=0;1:3;1:5;0;_

したがって、_-vvv_で実行すると、_check_procs_がコマンド_/bin/ps axwwo 'stat uid pid ppid vsz rss pcpu etime comm args'_を使用してプロセスを一覧表示していることがわかります。 rsyslogdプロセスが見つかり、次のようにリストされています。

_Ssl 101 406 1 256232 25392 0.0 157-05:57:14 rsyslogd rsyslogdproc#=0 uid=101 vsz=256232 rss=25392 pid=406 ppid=1 pcpu=0.00 stat=Ssl etime=157-05:57:14 prog=rsyslogd args=rsyslogd_

コマンドのヘルプを見ると、次のようになっています。

-s, --state=STATUSFLAGS Only scan for processes that have, in the output of `ps`, one or more of the status flags you specify (for example R, Z, S, RS, RSZDT, plus others based on the output of your 'ps' command).

だからそれは本当に機能しているはずです。テストのためだけに実行しようとしました

_/usr/lib/nagios/plugins/check_procs -C rsyslogd -w 1:3 -c 1:5 -s Ssl_

このコマンドは、最初のコマンドから期待する結果を返します。

_PROCS OK: 1 process with command name 'rsyslogd', STATE = Ssl | procs=1;1:3;1:5;0;_

check_procsはv1.5です。

同じテストコマンドがRHEL6.5サーバーで機能しているので、Ubuntu固有の可能性があります。

3
span

Check_procsのソースを見ると、表示されている動作は仕様によるものです。むしろ、動作はps実装の動作に完全に依存します。 (それがRHELシステムで機能する場合、それはほぼ間違いなく幸せな偶然です。)

プラグインは、/ procのないシステム(Linux以外など)で実行できるように、(/ procを掘り下げる代わりに)psを使用する必要があります。

ps出力をスクレイピングした後、プラグインはstrstrを呼び出して、プロセス状態が-sへのコマンドライン引数に含まれているかどうかを確認します。したがって、あなたの例では、「Ssl」が「S」の部分文字列であるかどうかを確認しています。

これは逆論理のように見えるかもしれません。たとえば、引数「S」が「Ssl」の部分文字列であるかどうかをチェックする必要がありますが、-sへの引数として複数のプロセス状態を提供することが目的であると思います。

たとえば、次のことができます。

check_procs -C rsyslogd -w 1:3 -c 1:5 -s S,Ssl,Sl
PROCS OK: 1 process with command name 'rsyslogd', STATE = S,Ssl,Sl

カンマは読みやすくするためのものです。プラグインは事実上それらを無視します。

4
Keith