Nagios check_procs状态filter

我在Ubuntu 14.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运行,并发现-vvv使用命令/bin/ps axwwo 'stat uid pid ppid vsz rss pcpu etime comm args'来列出进程。 我find我的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).

所以它真的应该工作。 只是为了testing,我试图运行

/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。

我有一个RHEL 6.5服务器上的相同的testing命令,所以它可能是Ubuntu的具体我猜。

看看check_procs的来源,你看到的行为是有目的的。 或者说,行为完全取决于ps实现的行为。 (如果它在你的RHEL系统上运行,那几乎肯定是一个幸运的巧合。)

插件必须使用ps (而不是在/ proc中进行挖掘),以允许它在没有/ proc的系统上运行(例如,非Linux)。

在输出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 

逗号只是为了使其更具可读性; 该插件有效地忽略它们。