Como verificar se um serviço (que escuta na porta determinada) está ativo e funcionando?

1

OK, digamos que eu tenha uma configuração do Nagios que monitore diferentes serviços usando os nagios-plugins.

Qual seria a melhor prática para o meu plugin nagios (provavelmente escrito em python) para determinar se determinado serviço está rodando OK?

O serviço específico em questão é um servidor de soquete python que escuta em alguma porta. Então, vou me certificar de que o nagios freqüentemente verifica esse serviço e, se ele parar de responder / morrer, eu deveria reiniciá-lo. O que devo fazer para saber se o servidor de soquete está ativo? Eventualmente, como eu verificaria se está respondendo.

Eu tenho controle sobre o serviço - eu posso mudar a maneira como ele funciona se isso me ajudar a determinar seu estado de saúde.

Qualquer ideia é bem vinda!

    
por ddinchev 19.04.2012 / 17:55

3 respostas

3

Mantendo os plug-ins padrão do Nagios encontrados, digamos, em um repositório do Ubuntu, você pode usar o check_tcp plugin para enviar uma string e então verificar se ela retorna a resposta esperada:

Usage:check_tcp -H host -p port [-w <warning time>] [-c <critical time>] [-s <send string>]
[-e <expect string>] [-q <quit string>][-m <maximum bytes>] [-d <delay>]
[-t <timeout seconds>] [-r <refuse state>] [-M <mismatch state>] [-v] [-4|-6] [-j]
[-D <days to cert expiry>] [-S <use SSL>] [-E]

Como você pode modificar seu serviço, você pode fazer algo como "Você está bem?" e procure por "Estou bem". Depende de quão envolvido você deseja obter a verificação para ver se o serviço está funcionando.

Você também pode usar check_procs para ver se o processo do serviço está lá. Isso pode estar em conjunto com uma verificação check_tcp ou como uma alternativa. Mais uma vez, depende do que você está fazendo e do quanto você realmente quer fazer. Se você quiser se envolver muito, pode escrever uma verificação personalizada do Nagios que fará todo tipo de coisa para verificar a funcionalidade do serviço e retornar mensagens de estado personalizadas para o servidor Nagios.

    
por 19.04.2012 / 18:03
2

Existem várias maneiras de garantir que um serviço esteja sendo executado.

  1. Você pode começar verificando se o nome do processo existe em ps -ef output.
  2. Você pode verificar a porta de escuta na saída de netstat -lnp | grep your_port .
  3. Você pode tentar se conectar à porta usando uma função python.
  4. Você pode tentar solicitar algum serviço depois disso e verificar a saída retornada. Isso está relacionado ao serviço. Por exemplo, você pode solicitar uma página existente para o serviço HTTP e assim por diante. Isso permitirá que você também meça o tempo de resposta.
por 19.04.2012 / 18:03
2

Você pode usar um script python como sugeriu para verificar, aqui está um que eu escrevi que apenas verifica uma porta. link

Aqui está uma versão ligeiramente diferente, que é muito mais rápida, e verifica a mesma porta várias vezes que você especificar. Ele atingirá um servidor local 1500 vezes em menos de meio segundo.

link

Se você estiver procurando por um script de shell local, o pgrep processname funcionará bem, no Bash, algo assim deve te dar o que você quer.

PROC_PID=$(pgrep processname)
if [ "${PROC_PID}" ]
 then
  echo "Process is running"
 else
  echo "Process is not running"
fi

Você pode fazer algo semelhante com lsof -i: PORT Para https / tcp 443 ficaria parecido com

    PORT_LISTEN=$(lsof -i :443 | grep LISTEN)
if [ "${PORT_LISTEN}" ]
 then
  echo "Port is listening ${PORT_LISTEN}"
 else
  echo "Nothing is listening on 443"
fi
    
por 19.04.2012 / 19:40