Фильтр состояния 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 чтобы увидеть, содержится ли состояние процесса в вашей командной строке arg to -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

Запятые просто для того, чтобы сделать его более читабельным; плагин эффективно игнорирует их.

Другие вопросы по тегам