Simples de fazer: receba avisos por e-mail se seu servidor tiver problemas


Aprenda a receber um feedback do seu servidor


Monit

Solução de fácil implantação para monitoramento de servidores

Monitorar é mais do que uma boa prática ou a capacidade de antecipar problemas,  é você em paz, seu ramal em completo silêncio e sem diretores “brotando” do chão. É a tranquilidade em versão digital. Algo assim é desejável e largamente suportado. Soluções não faltam e vão de scripts pontuais à ambiente complexos em Zabbix. Mas para quando o foco não é o monitoramento, a solução Monit cumpre esse papel sem roubar a cena. Monitora processos, arquivos e recursos com simplicidade e é recomendável em ambientes sem soluções do tipo já implementadas.

O Monit funciona como um deamon e pode monitorar continuamente processos, arquivo e recursos. Em caso de problema, avisa por e-mail e pode agir por nós executando scripts e salvando o dia. Neste breve tutorial, você descobre como monitorar um processo do Apache, um arquivo de backup e os recursos principais de um servidor com Debian 7.

Configurações Iniciais

A instalação no Debian 7 é simples já que a pacotes pré-compilados no repositório oficial. A configuração também é sem mistérios, acompanhe:

# apt-get install monit

Com o pacote instalado, é preciso definir as configurações  primordiais. Abaixo são listados as mais importantes e comentadas para entendimento:

# vim /etc/monit/monitrc.d

# Intervalo em segundos entre as verificações (dez no caso), apenas para teste. Recomenda-se usar um valor maior, como 120 segundos .

set daemon 10

# Onde será gravado os logs.

set logfile /var/log/monit.log

# Onde estarão as configurações destinadas aos monitoramentos. Em algumas distribuições esta pasta pode estar defina errada. Importante confirmar.

include /etc/monit/conf.d/*

# Defina os acessos a interface web de gerenciamento. Aqui a porta.

set httpd port 2812

# Usuário e senha.

allow admin:monit

# E IPs ou LAN permitidos.

allow 192.168.56.0/24

Depois, recarregue as configurações:

service monit reload

O Monit entrega uma interface web de gerenciamento e pode ser acessada pela porta 2812:

http://ipdoservidormonit:2812

Monitoramento de processos

Quando um processo é crítico para o funcionamento do servidor é preciso garantir que ele esteja sempre em execução. O Monit pode monitorar um processo para caso pare seja reiniciado sem intervenção manual. No exemplo abaixo o Apache será monitorado, mas poderia ser qualquer outro processo. Crie um arquivo de configuração:

# vim /etc/monit/monitrc.d/apache

# Localização do arquivo de processo do Apache

check process apache with pidfile /var/run/apache2.pid

# Comando para iniciar e parar o processo. Aguarda no máximo 60 segundos para inicialização e depois aborta.
    start program = “/etc/init.d/apache2 start” with timeout 60 seconds
    stop program  = “/etc/init.d/apache2 stop”

Recarregue as configurações:

service monit reload

Para testar a configuração, mate o processo do apache e observe nos logs do Monit o serviço ser automaticamente reiniciado após 10 segundos da queda:

# killall -9 apache2

# tail -f /var/log/monit.log

[EDT Oct  3 12:47:24] error    : ‘apache’ process is not running
[EDT Oct  3 12:47:24] info     : ‘apache’ trying to restart
[EDT Oct  3 12:47:24] info     : ‘apache’ start: /etc/init.d/apache2
[EDT Oct  3 12:47:27] info     : ‘apache’ process is running with pid 5444

Dá inda para reiniciar um processo após um determinado período (3 dias no exemplo):

check process apache2 with pidfile /var/run/apache2.pid
start program = “/etc/init.d/apache2 start”
stop program = “/etc/init.d/apache2 stop”
if uptime > 3 days then restart

Monitoramento de arquivos

De forma semelhante pode-se verificar a existência de um arquivo (/root/scripts/executa_backup.sh) e executar um script (/root/scripts/Aviso.Erro.Backup.sh) em caso negativo. Para monitorar um script de backup, por exemplo:

Crie o arquivo de configuração:

#vim /etc/monit/monitrc.d/backup_script

Adicione este conteúdo:

# Verifica se o arquivo existe e executa o script indicado em caso negativo

check file with path /root/scripts/executa_backup.sh
if does not exist then exec “/root/scripts/Erro.Backup.sh”

Este exemplo verifica se um arquivo foi alterado e alerta:

#vim /etc/monit/monitrc.d/firewall

 check file firewall.sh with path /etc/init.d
if changed timestamp then alert

Neste aqui, verifica se um arquivo possui mais de 10 Gb de tamanho e alerta:

#vim /etc/monit/monitrc.d/backup_arquivo

check file backup.completo.tgz /backups
if size > 10 GB then alert

Monitoramento de recursos

Igualmente importante é garantir que os recursos do servidor não se esgotem a ponto de disponibilizar os serviços em execução. Veja alguns exemplos:

Monitor o espaço da partição raiz:

#vim /etc/monit/monitrc.d/espaco_raiz

check filesystem rootfs with path /
if space usage > 80% then alert

Monitor o espaço da partição raiz:

#vim /etc/monit/monitrc.d/espaco_raiz

check filesystem rootfs with path /
if space usage > 80% then alert

Monitorar se um processo (apache no exemplo) consome mais que 70 % de CPU durante cinco ciclos de verificação do munit:

#vim /etc/monit/monitrc.d/apache_cpu

check process apache2 with pidfile /var/run/apache2.pid
    start program = “/etc/init.d/apache2 start”
    stop program = “/etc/init.d/apache2 stop”

    if cpu is greater than 70% for 5 cycles then restart

Criar dependências

A combinação de verificações aumenta a disponibilidade. Alguns serviços, mesmo em execução, podem ser inúteis sem outros. Uma aplicação web, por exemplo, pode depender tanto de um servidor web como de um banco de dados. No exemplo, a verificação do apache só considerado positiva se a verificação do postgresql também der tudo certo.

check process apache with pidfile /var/run/apache2.pid
     start program = “/etc/init.d/apache2 start”
     stop program = “/etc/init.d/apache2 stop”
depends on postgresql

 check process postgresql with pidfile /var/run/postgresql/postgresql.pid
       start = “/etc/init.d/postgresql start”
       stop  = “/etc/init.d/postgresql stop”
       if failed port 5432 for 5 cycles then restart

Alertas por e-mail

Os alertas gerados pelas verificações configuradas por padrão são exibidos apenas nos logs, mas o Monit pode enviar e-mails com os avisos. Para isso é preciso um servidor de MTA configurado localmente ou referencialmente em um servidor dedicado e com relay liberado para o IP do servidor monitorado.

Para habilitar, adicione as seguintes opções no arquivo de configuraçao do monit:

# vim /etc/monit/monitrc.d

# Define o endereço de e-mail que irá receber as mensagens com alertas

alert email@dominio.com.br on {nonexist, timeout, timestamp e permission}}
        with mail-format {
              from:     remetente@$HOST
              subject:  apache $EVENT – $ACTION
              message:  Esse evento ocorreu no $HOST em $DATE.                       
              Espero ter colaborado. Seu amigo,

              Monit
      }

Este exemplo envia e-mails para o endereço email@dominio.com.br em eventos do tipo

nonexist (arquiovo que não existe), timeout (tempo expirado), timestamp (arquivo alterado) e permission (permissão). Mas é possível utilizar muitos outros.

Consulte a rica documentação no site do desenvolvedor em http://mmonit.com/monit/documentation/monit.html#alert_messages

Conclusão

O monit é um serviço pequeno, consome poucos recursos, é de simples implantação e ajuda a manter um servidor operacional. É recomendável sempre utilizá-lo a não ser que já se tenha uma solução de monitoramento mais robusta como o Zabbix disponível.

Gostou do Monit? Conheça mais sobre ele

Documentação oficial:

http://mmonit.com/monit/documentation/monit.html

Conheça o M/Monit que expande a capacidade do Monit sob uma moderna e linda interface web:

https://mmonit.com/screenshots/

E me escreva sobre sua experiência com o Monit ou deixe uma recomendação nos comentários.

Rodrigo Rodrigues Dias

Senior Open Software Specialist

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios são marcados com *