Nagios check_procs state filter

3

Estou no Ubuntu 14.04 e tentando executar

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

e retorna

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

Portanto, eu corro com -vvv e descubro que check_procs usa o comando /bin/ps axwwo 'stat uid pid ppid vsz rss pcpu etime comm args' para listar processos. Eu acho o meu processo rsyslogd e está listado da seguinte forma:

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

Olhando para a ajuda do comando, diz:

-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).

Então, realmente deveria estar funcionando. Apenas para testar eu tentei rodar

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

Este comando retorna o resultado que eu espero do primeiro comando:

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

check_procs é v1.5.

Eu tenho o mesmo comando de teste trabalhando em um servidor RHEL 6.5 para que ele possa ser específico do Ubuntu, eu acho.

    
por span 28.11.2014 / 16:07

1 resposta

4

Olhando a fonte para check_procs, o comportamento que você está vendo é por design. Ou melhor, o comportamento depende inteiramente do comportamento da implementação ps . (Se funciona no seu sistema RHEL, isso é quase certamente uma feliz coincidência.)

O plugin deve usar ps (em vez de cavar em / proc) para permitir que ele seja executado em sistemas sem / proc (por exemplo, não-Linux).

Depois de extrair a saída ps , o plug-in chamará strstr para ver se o estado do processo está contido em seu argumento da linha de comandos para -s . Então, no seu exemplo, está verificando se "Ssl" é uma substring de "S".

Pode parecer que isso é uma lógica inversa, por exemplo, que ele deve estar verificando se seu argumento "S" é uma subseqüência de "Ssl", mas acredito que a intenção é fornecer vários estados do processo como um argumento para -s.

Por exemplo, você pode fazer isso:

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

As vírgulas são apenas para torná-lo mais legível; o plugin efetivamente os ignora.

    
por 30.11.2014 / 17:45

Tags