como monitorar o tempo e o tempo de inatividade de um serviço linux

4

Como monitorar o tempo e o tempo de inatividade de um serviço linux.

Eu criei um serviço para meu aplicativo usando o chkconfig (RHEL 6.3). Eu quero monitorar quando o serviço é ligado e parado.

Eu posso monitorar o serviço gravando no arquivo de log enquanto dou service test start/stop , mas isso não pegaria meu aplicativo se ele falhasse ou terminasse anormalmente.

    
por Ram 04.09.2013 / 06:31

4 respostas

5

Se você quiser monitorar muitos aplicativos em servidores diferentes, vá para o NagiOS, se você quiser monitorar aplicativos específicos, propriedade de arquivos, qualquer coisa, então vá para o Monit.

Você pode usar o Monit

Para monitorar processos daemon ou programas semelhantes em execução no host local. O Monit é particularmente útil para monitorar processos do daemon, como aqueles iniciados no tempo de inicialização do sistema a partir do /etc/init.d/. Por exemplo, sendmail, sshd, apache e mysql.

Em diferença para muitos sistemas de monitoramento, o Monit pode agir se uma situação de erro ocorrer, por exemplo; Se o sendmail não estiver em execução, o Monit pode iniciar o sendmail novamente automaticamente ou se o apache estiver usando muitos recursos (por exemplo, se um ataque DoS estiver em andamento) O Monit pode parar ou reiniciar o apache e enviar uma mensagem de alerta. Monit também pode monitorar características do processo, como; quanta memória ou ciclos cpu um processo está usando

Atualização :: parte da configuração

O Monit é mais fácil de instalar através do aptitude ou do apt-get

sudo aptitude install monit 

Depois de fazer o download dos downloads, você pode adicionar programas e processos ao arquivo de configuração

vim /etc/monit/monitrc

set daemon 3                    # check services at 3-second intervals
set logfile /var/log/monit.log  # you can see what monit is doing
set alert [email protected]        # receive all alerts
include /etc/monit.d/*          # add monit script path

Em seguida, crie um script de monit para o seu aplicativo, apenas observe o seguinte exemplo de script:

Você só precisa criar um script de monit em /etc/monit.d/ como /etc/monit.d/httpd.monit , depois de recarregar o serviço de monit e verificar os logs de monit tail -f /var/log/monit.log

Para o Apache

check process apache with pidfile /usr/local/apache/logs/httpd.pid
   start program = "/etc/init.d/httpd start" with timeout 60 seconds
   stop program  = "/etc/init.d/httpd stop" 
   if cpu > 60% for 2 cycles then alert
   if cpu > 80% for 5 cycles then restart
   if totalmem > 200.0 MB for 5 cycles then restart
   if children > 250 then restart
   if loadavg(5min) greater than 10 for 8 cycles then stop
   if failed host www.tildeslash.com port 80 protocol http
      and request "/monit/doc/next.php"
      then restart
   if failed port 443 type tcpssl protocol http
      with timeout 15 seconds
      then restart
   if 3 restarts within 5 cycles then timeout
   depends on apache_bin
   group server

Para o Safesquid Proxy

# Check if the safesquid process is running by monitoring the PID recorded in /opt/safesquid/safesquid/run/safesquid.pid
check process safesquid with pidfile /opt/safesquid/safesquid/run/safesquid.pid
group root
start program = "/etc/init.d/safesquid start"
stop program = "/etc/init.d/safesquid stop"
mode active
# If safesquid process is active it must be updating the performance log at
# /opt/safesquid/safesquid/logs/performance/performance.log every 2 seconds.
# If the file is more than 3 seconds old we definitely have a problem

check file "safesquid-PERFORMANCELOG" with path /opt/safesquid/safesquid/logs/performance/performance.log
  if timestamp > 3 SECOND then alert
    
por 04.09.2013 / 06:45
1

Se você souber o pid do serviço que deseja monitorar, escrevi isso há algum tempo para rastrear o uso de recursos de coisas específicas em um servidor:

link

É completamente estável, muito discreto e bastante simples de usar. Ele relata uma versão um pouco mais detalhada do que você pode ver no topo, mas com uma frequência mais baixa e reporta a um arquivo de log. Então, por exemplo, você poderia configurá-lo para verificar o processo a cada minuto ou cinco minutos - o que provavelmente não lhe dará muitas pistas sobre a causa, mas lhe dará uma janela para quando ele parou.

    
por 06.09.2013 / 14:51
1

Nos comentários, você mencionou que está tentando monitorar um servidor da Web JBoss.

Você perguntou como monitorar seu serviço , não seu processo. Não importa se o JBoss ainda está em execução, se o processo já encravou e não está respondendo a consultas. Você quer saber se o serviço não está funcionando , não apenas se o processo morrer.

Se você não quiser executar um pacote de monitoramento de serviços em grande escala como Nagios ou Icinga ou Zabbix ou OpenNMS ou Shinken ou Zenoss , você pode sempre usar algo como curl ou wget .

Crie um script, vamos chamá-lo de /root/bin/check_web e executá-lo em um crontab:

*/5 * * * * /root/bin/check_web http://www.example.com [email protected]

O script pode ser parecido com:

#!/bin/bash

if [[ $1 !~ ^https?://[a-z][a-z.]+ ]]; then
  echo "ERROR: that doesn't look like a URL ($1)" >&2
  exit 1
elif [[ $2 !~ .+@[a-z0-9.-]+ ]]; then
  echo "ERROR: that doesn't look like an email address ($2)" >&2
  exit 1
fi

flag="/tmp/m-${1//[^[:alnum:]:.-]/_}"

wget -O /dev/null -q "$1"
result=$?

if [[ $result -eq 0 ]]; then
  if [ -f "$flag" ]; then
    date | Mail -s "Clear: $1" "$2"
    rm -f "$flag"
  fi
else
  if [ ! -f "$flag" ]; then
    echo "error: $?" | Mail -s "OFFLINE: $1" "$2"
    touch "$flag"
  fi
fi

O ninho de if s ajuda a reduzir o ruído do seu e-mail caso ocorra algum problema. Você não precisa se distrair com outro aviso a cada 5 minutos enquanto trabalha na correção do problema. Mas é bom receber um aviso de que as coisas retornaram, caso o problema ocorra de uma reinicialização espontânea ou interrupção de rede temporária.

Com um script ligeiramente genérico como este, você pode monitorar vários sites e configurar vários destinatários de e-mail para notificação.

Crie mais alguns desses scripts e, talvez, adicione funcionalidade para emitir avisos para respostas lentas que sejam diferentes de CRITICALs quando o serviço ficar completamente offline e, em seguida, forneça um front-end da web para procurar e gerenciar o status dos vários hosts. e crie um daemon dedicado que execute estes ao invés do cron, e você terá o Nagios. : -)

    
por 17.09.2013 / 04:43
0

Já considerou a execução do Nagios?

    
por 04.09.2013 / 06:38