Seu sistema caiu? O monit recupera ele automaticamente

Em um cenário perfeito os sistemas estariam sempre funcionando. Nunca ocorreriam problemas, quedas de serviço ou indisponibilidades. No mundo real essas coisas sempre acontecem, só nos resta pensar em como diminuir o impacto dessas fatalidades.

Para reduzir os problemas causados por quedas de serviços, uma melhoria é o monitoramento local dos serviços de um sistema. Para tanto é necessário configurar um software que fique, localmente, observando critérios e caso situações determinadas ocorram o software poderá alertar o administrador ou até mesmo realizar um reparo automático do serviço. O Monit é uma das aplicações para sistemas UNIX que realizam essa tarefa. Utilizamos Monit na Evolux e o que mais gostamos nele é sua estabilidade e sua facilidade de configuração / manutenção.

 

Observe o seguinte trecho de uma configuração do Monit:

 

if cpu > 60% for 5 cycles then alert

 

Ela indica ao Monit que, caso o processo em questão ocupe mais de 60% de uma cpu durante 5 ciclos, o serviço deve sinalizar alerta ao administrador. A duração de um ciclo pode ser configurada de acordo com sua necessidade.

 

Vejamos outro exemplo de configuração possível:

 

    if totalmem > 3 GB 5 times within 5 cycles then restart

 

Totalmem contabiliza o total de memória ocupado pelo processo e por seus filhos. É bem comum utilizar esse tipo de configuração com servidores web que criam diversos processos filhos (http://bit.ly/1dTO76f). Caso a condição "memória total ocupada pelo processo e seus filhos for maior que 3GB" e ocorra 5 vezes dentro do período de 5 ciclos, reinicie o processo.

 

Existem muitos testes e ações possíveis para o Monit, para uma documentação completa consulte a Documentação Oficial do Monit 

 

Segue o exemplo de uma configuração completa de um serviço no Monit:

 

# MySQL

check process mysql with pidfile /var/run/mysqld/mysqld.pid

   group base_system

   start program = "/etc/init.d/mysql start"

   stop program = "/etc/init.d/mysql stop"

   if 5 restarts within 5 cycles then timeout

   if cpu > 100% for 8 cycles then alert

   if mem > 2 GB then alert

   if mem > 3 GB then restart

 

Neste exemplo estamos monitorando o processo do MySQL cujo PID encontra-se no arquivo "/var/run/mysqld/mysqld.pid". Em seguida mostramos ao Monit como iniciar e parar o serviço MySQL. Finalmente através de diretivas "if" configuramos as condições que irão disparar os eventos que queremos observar. Para cada evento devemos atribuir uma ação correspondente.

Nesse exemplo o Monit irá alertar ou reiniciar o serviço dependendo da situação. As configurações devem ser ajustadas de acordo com o objetivo do seu serviço e especificações de hardware do seu servidor.

 

O Monit é uma ferramenta de código aberto com muita flexibilidade para customização e configuração. Se você ainda não monitora localmente os serviços de seu sistema, recomendamos fortemente que você faça uma experiência com ele. Isso irá economizar seu tempo e melhorar a percepção do usuário final da aplicação, já que o monit vai reiniciar o processo que está com problema e em muitos casos o usuário nem chega a perceber que houve uma falha.