Gerenciando processos Linux com Monit

Como instalar e configurar o Monit para gerenciar os processos de sua Aplicação Web em produção.

Texto escrito por Pedro Henrique Pereira. Pubicado originalmente em jun/2016.

O Monit, como o seu nome diz, é uma ferramenta de monitoramento de processos e recursos de um servidor Linux.

Nele pode ser configurado diretivas para monitorar o estado de processos do sistema (Ex: Nginx), e realizar determinadas ações caso ele esteja utilizando uma quantidade grande de recursos do servidor, ou outro tipo de condição. Além de processo, também é possível com esta ferramenta monitorar diretamente a utilização dos recursos de um servidor (Filesystem, Memória, CPU) como um todo, e enviar alertas por email caso eles atinjam um determinado limite superior pré-configurado.

Sua instalação é muito simples, pois ele é facilmente encontrado nos gerenciadores de repositório da maioria das Distros Linux, e as diretivas de configuração são bem intuitivas.

Instalação:

Em servidores Ubuntu ou Debian:

$ sudo apt-get install monit

Em servidores CentOS ou RHEL:

$ yum install monit -y

Em servidores OpenSUSE:

$ zypper install monit

Inicialização:

O instalador do Monit cria um script de inicialização no sistema para o mesmo, e dependendo do servidor ele pode utilizar o upstart ou o systemd:

Initscript upstart:

$ service monit (start|stop|restart|status)

Initscript systemd:

$ systemctl (start|stop|restart|status) monit.service

Configuração

Após a instalação, o arquivo principal de configuração do Monit fica localizado em /etc/monit/monitrc, ele já possui vários valores definidos como default, e comentários com exemplos de diretivas para monitorar recursos e processos.

Exemplo de algumas diretivas básicas de configuração:

##
# Regra para inicializar o Monit como um daemon (processo background), e o tempo em segundos, de um ciclo de monitoramento.
#
set daemon 60 # check services at 1-minute intervals

##
# Regra para definir o caminho do arquivo de log do monit
#
set logfile /var/log/monit.log

##
# Regra de include de outros arquivos de configuração do Monit. Vamos os arquivos da pasta indicada nesta regra para definir
# as diretivas de monitoramento de recursos e processos do servidor.
#

include /etc/monit/conf.d/*

A última linha da configuração básica do exemplo acima define uma regra de inclusão dos arquivos de configuração em /etc/monit/config.d, e é nessa pasta onde vamos incluir mais exemplos de configuração para enviar alertas, subir a aplicação Web de gestão, monitorar recursos do sistema e processos.

Este exemplo define as configurações para a conexão com um mailserver utilizando o protocolo SMTP, para o envio de alertas:

##
# Regra para definir o servidor de envio de email. Neste exemplo é mostrado a configuração do envio através de uma conta
# em um servidor SMTP, por login e senha, usando encriptação TLSv1
#
set mailserver smtp.gmail.com
port 587
username "no-reply@wkm.com.br"
password "####"
using tlsv1

## Regra para redefinir o formato do email enviado:
## Monit by default uses the following format for alerts if the the mail-format
## statement is missing::
## --8<--
## set mail-format {
## from: monit@$HOST
## subject: monit alert -- $EVENT $SERVICE
## message: $EVENT Service $SERVICE
## Date: $DATE
## Action: $ACTION
## Host: $HOST
## Description: $DESCRIPTION
##
## Your faithful employee,
## Monit
## }
## --8<--

##
# Definição de contas de usuário que irão receber os emails de alerta do Monit
#
set alert pjesus@wkm.com.br

O Monit também pode subir uma aplicação Web para a visualização dos processos e recursos que estão sendo monitorados, e para executar ações sobre os mesmos.

Podemos configurar a porta de acesso, Whitelist de IPs que podem acessar a aplicação, e login e senha para autenticação HTTP, como é mostrado no exemplo abaixo:

set httpd port 2815 and               # Porta TCP da aplicação Web.
use address endereco.wkm.com.br # Regra que define um hostname para a aplicação
allow 1.1.1.1 # Regra para permitir acesso apenas dos IPs especificados.
allow 2.2.2.2 # //
allow login:senha # Regra para definir login e senha para autenticação HTTP básica.

Para monitorar a utilização dos recursos do servidor, como memória, CPU e disco, vamos definir as seguintes diretivas:

##
# Realiza o monitoramento de recursos gerais do sistema, como memória, CPU, e carga do sistema (load)
# Este exemplo mostra uma checagem simples de uso de memória e CPU
# A documentação completa do monitoramento do filesystem pode ser encontrada na página de documentação do Monit,
# Com o link localizado ao final deste artigo
#
check system [nome_do_sistema]
if memory usage > 90% for 3 cycles then alert
if cpu usage (system) > 50% for 3 cycles then alert

##
# Realiza o monitoramento de permissões para usuários e grupos, espaço e inodes utilizados
# Este exemplo mostra apenas uma checagem simples de espaço em disco, no disco localizado em /dev/xvda1
# A documentação completa do monitoramento do filesystem pode ser encontrada na página de documentação do Monit,
# Com o link localizado ao final deste artigo
#
check filesystem [nome_do_filesystem] with path /dev/xvda1
if space usage > 90% for 3 cycles then alert

Através do arquivo de PID, o Monit pode monitorar qualquer processo em execução no servidor.

Nesta configuração podemos definir regras de limite de utilização de recursos, validar o acesso a aplicação através de sua porta TCP ou socket, e executar determinadas ações, como restart e alert.

No exemplo abaixo está configurado o monitoramento de uma instância do servidor de banco de dados MySQL:

##
# OBS: as regras "cycles", representam o intervalo de tempo que o Monit realiza a checagem das diretivas. O valor de um cycle
# é definido no monitrc, e, no caso deste exemplo, está definido como 60 segundos.
#

check process mysql # Nome do processo (mysql)
with pidfile /var/run/mysqld/mysqld.pid # Caminho do PIDfile do processo
start program = "/usr/sbin/service mysql start" # Comando para iniciar o processo (aqui é necessario utilizar o caminho absoluto para executar qualquer programa pois o PATH não é definido)
stop program = "/usr/sbin/service mysql stop" # Comando para parar o processo (aqui é necessario utilizar o caminho absoluto para executar qualquer programa pois o PATH não é definido)
if failed host 127.0.0.1 port 3306 then restart # Monitoramento do acesso à porta TCP 3306 (do MySQL), se esse teste falhar, o Monit reinicia o processo (restart)
if totalmem > 500.0 MB for 5 cycles then restart # Monitoramento da memória utilizada pelo MySQL; se for maior que 500 MB, durante 5 ciclos, o Monit reinicia o processo (restart)
if cpu usage > 90% for 3 cycles then alert # Monitoramento da CPU utilizada pelo MySQL; se for maior que 90%, durante 3 ciclos, o Monit envia um alerta por email (alert)
if 5 restarts within 5 cycles then timeout # Se o Monit reiniciar este processo 5 vezes em um intervalo de 5 ciclos, o Monit para o monitoramento deste processo

Após definir todas as configurações, basta agora reiniciar o processo do Monit utilizando seu initscript, e para verificar que está funcionando, acesse a aplicação Web dele configurada neste artigo para a porta 2815:

Referências:

Página Principal do Monit: https://mmonit.com/monit/?source=post_page—–5e688e3d48a2——————————–

Documentação completa: https://mmonit.com/monit/documentation/monit.html?source=post_page—–5e688e3d48a2——————————–

Quer conhecer mais sobre soluções digitais inovadoras?
Acesse: http://www.wkm.com.br

Isto é o título

Lorem ipsum dolor sit amet consectetur adipiscing elit dolor
plugins premium WordPress