我有一个 etch nagios 服务器(我将其称为 NagiosServer),成功监控了很多东西,包括另一个 etch 服务器(MonitorEtch)。使用 check_nrpe 和 check_procs,我可以检查正在运行的守护进程(例如“/usr/sbin/squid”)的进程列表。
从 NagiosServer 检查 MonitorEtch(正确结果):
/usr/lib/nagios/plugins/check_nrpe -H MonitorEtch -c check_process -a /usr/sbin/squid 1:1 1:1
PROCS OK: 1 process with args '/usr/sbin/squid'
/usr/lib/nagios/plugins/check_nrpe -H MonitorEtch -c check_process -a whatever 1:1 1:1
PROCS CRITICAL: 0 processes with args 'whatever'
我建立了一个想要监控的新服务器,运行 Lucid (MonitorLucid)。无论我尝试从 NagiosServer 监控什么进程,我都会得到比我应该得到的更多的结果。
从 NagiosServer 检查 MonitorLucid(结果不正确):
/usr/lib/nagios/plugins/check_nrpe -H MonitorLucid -c check_process -a whatever 1:1 1:1
PROCS OK: 1 process with args 'whatever'
ps ax|grep sophie
12737 ? Ss 0:00 /usr/sbin/sophie -D
12738 ? S 0:03 /usr/sbin/sophie -D
19591 pts/0 S+ 0:00 grep --color=auto sophie
/usr/lib/nagios/plugins/check_nrpe -H 192.168.19.252 -c check_process -a sophie 1:1 1:1
PROCS CRITICAL: 3 processes with args 'sophie'
MonitorLucid/MonitorEtch 上的 /etc/nagios/nrpe_local.cfg 的内容:
allowed_hosts=NagiosServer,127.0.0.1
dont_blame_nrpe=1
command[check_process]=/usr/lib/nagios/plugins/check_procs -a $ARG1$ -m PROCS -w $ARG2$ -c $ARG3$
但是,如果我在本地执行检查,它会返回正确的结果!
从 MonitorLucid 检查 MonitorLucid(正确结果):
/usr/lib/nagios/plugins/check_procs -a whatever -m PROCS -w 1:1 -c 1:1
PROCS CRITICAL: 0 processes with args 'whatever'
/usr/lib/nagios/plugins/check_procs -a sophie -m PROCS -w 1:1 -c 1:1
PROCS CRITICAL: 2 processes with args 'sophie'
我现在没有什么主意了,只差检查 1 个比我应该检查的更多的实例。
答案1
我遇到过类似的问题。check_procs
内部调用/bin/ps axwo 'stat uid pid ppid vsz rss pcpu comm args'
,列出进程然后计算它们。如果您已将 nagios 配置为以其他用户身份运行,则它用于sudo
执行命令。问题就在这里。如果您输入sudo ps -AF | grep sudo
,某些发行版返回“ grep sudo
”,其他发行版返回“ sudo ps -AF
”和“ grep sudo
”。由于 check_procs 计算所有进程,因此您将在不同的机器上获得不同的结果。不幸的是,我还没有解决方案如何强制 check_procs 不计算sudo
进程。
答案2
听起来check_procs
Lucid 中的版本有错误(或者至少改变了它的行为);它总是找到一个额外的事实表明它正在对进程名称和参数的任何部分进行子字符串匹配,并找到与运行插件相关的进程之一。值得向 Ubuntu 报告有关它的错误。