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.