Nagios check_procs 状态过滤器

Nagios check_procs 状态过滤器

我在 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并发现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。

我在 RHEL 6.5 服务器上运行着相同的测试命令,所以我猜它可能是 Ubuntu 独有的。

答案1

查看 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

逗号只是为了使其更具可读性;插件实际上会忽略它们。

相关内容