Nagios monitora processo por arquivo pid

1

Existe alguma possibilidade de monitorar processos com nagios? Eu encontrei o comando check_procs, que não posso usar porque não me permite especificar um arquivo para ler o PID. Além disso, parece que não encontro nada sobre isso no Google, então talvez esteja tendo alguns equívocos sobre o que os nagios devem fazer?

Meu cenário é que eu tenho um servidor que tem alguns VirtualHosts. Eu posso monitorar aqueles com check_http muito bem.

No entanto, um dos Sites depende de um processo em segundo plano que eu também quero monitorar com nagios.

    
por moritz 07.08.2011 / 15:28

4 respostas

2

A solução para isso, na verdade, é escrever uma verificação que monitore seu processo em segundo plano para obter a funcionalidade adequada. Se você quer apenas ter certeza de que algo está rodando em um determinado PID, um script que execute pgrep $(cat /path/to/pidfile) funcionaria, mas isso é repleto de falso positivo potencial - se o seu processo morreu, então alguma outra coisa é executada e obtém o mesmo PID, então a sua verificação de processo terá sucesso quando não deveria.

A maneira correta de fazer isso é extorquir o código de daemonização em seu serviço e executá-lo sob algo como daemontools - e quando ele explodir ele será automaticamente reiniciado. Você também precisa monitorar a funcionalidade, para capturar momentos em que o processo não morre, mas de alguma forma falha ao rodar corretamente.

    
por 07.08.2011 / 23:42
2

O nagios verifica processos devido a diferentes verificações, não pelo PID. Todos os serviços (como HTTP, MySQL, DNS, ...) possuem verificações configuráveis separadas.

Por exemplo, tenho um servidor da Web e um servidor DNS em execução. Então eu usaria o plugin check_http e o check_dns e faria os nagios fazerem uma pesquisa de dns para um dos domínios para os quais hospedo o dns e ver se o servidor web ainda está rodando.

Se o serviço não estiver funcionando corretamente, o nagios mostrará um alarme. O mesmo para a verificação do servidor da web e outros. O comando check_procs é usado para ver se o seu servidor não está sendo executado em muitos processos ao mesmo tempo (sobrecarga).

Todas as verificações no nagios podem ser configuradas com parâmetros diferentes.

    
por 07.08.2011 / 16:02
0

Você pode fazer isso extraindo hrSWRunName info de HOST-RECOURCES-MIB .

  1. Instale net-snmp no host remoto
  2. Edite o arquivo snmp.conf como abaixo:

    rocommunity s3cret
    view    systemview    included   .1.3.6.1.2.1.1
    view    systemview    included   .1.3.6.1.2.1.25
    
  3. No host de monitoramento, defina um comando check_snmp com algo assim:

    define command{
        command_name    check_snmp
        command_line    $USER1$/check_snmp -H $HOSTADDRESS$ -P $ARG1$ -o $ARG2$ -C $ARG3$ -r $ARG4$
    }
    
  4. E, finalmente, crie uma definição de serviço:

        define service{
            use                     generic-service
            host_name               remote_host
            service_description     <your_service_name>
            check_command           check_snmp!2c!HOST-RESOURCES-MIB::hrSWRunName.<your_service_pid>!s3cret!<service_name>
            contact_groups          admin
        }
    

Teste a partir da linha de comando:

$ /usr/local/nagios/libexec/check_snmp -o HOST-RESOURCES-MIB::hrSWRunName.2910 -C s3cret -H <ip_address> -P 2c -r nrpe
SNMP OK - "nrpe" | 
$ /usr/local/nagios/libexec/check_snmp -o HOST-RESOURCES-MIB::hrSWRunName.2910 -C s3cret -H <ip_address> -P 2c -r gmond
SNMP CRITICAL - *"nrpe"* | 
    
por 07.08.2011 / 17:45
0

Se o processo de segundo plano sempre tiver o mesmo nome, o comando check_procs funcionará.

Aqui estão as definições dos comandos locais para dois processos em segundo plano que eu verifico no meu servidor. O primeiro (OpenDKIM) precisa ter 2 processos em execução para passar no teste. O segundo (dk-filter) precisa ter 1 processo em execução para passar.

# 'check_local_opendkim' command definition
define command{
        command_name    check_local_opendkim
        command_line    $USER1$/check_procs -c 2:2 -C opendkim
        }

# 'check_local_dk-milter' command definition
define command{
        command_name    check_local_dk-milter
        command_line    $USER1$/check_procs -c 1:1 -C dk-filter
        }

Veja como configurar as mesmas verificações em um arquivo nrpe.cfg:

command[check_opendkim]=/usr/local/nagios/libexec/check_procs -c 2:2 -C opendkim
command[check_dk-milter]=/usr/local/nagios/libexec/check_procs -c 1:1 -C dk-filter

Ou há algum motivo para você não confiar no nome do processo para verificação de que está sendo executado?

    
por 08.08.2011 / 17:32