Introducción a Monit para la supervisión de servidores

Contenidos

Monit es un programa de monitoreo de servidores que puede verificar los procesos que se ejecutan en su sistema para asegurarse de que siempre estén en línea y funcionando dentro de límites razonables de CPU y memoria. Además viene con una interfaz web para monitorear su sistema.

¿Qué hace Monit?

Simplemente, Monit verificará un procedimiento determinado cada dos minutos (de forma predeterminada) para ver cómo está funcionando. Mantiene un registro del uso de recursos y puede tomar medidas si se produce un error. Esto incluye relanzar procesos bloqueados y reiniciar procesos que usan demasiados recursos.

Monit establece su comportamiento totalmente a través de archivos de configuración. Aquí está la configuración predeterminada para MySQL como ejemplo:

check process mysql
  with pidfile /var/run/mysqld/mysqld.pid
  start program = "/usr/sbin/service mysql start" with timeout 60 seconds
  stop program = "/usr/sbin/service mysql stop" with timeout 60 seconds
  if totalmem > 400 MB for 5 cycles then alert
  if totalmem > 600 MB for 5 cycles then restart
  if cpu > 50% for 5 cycles then alert
  if cpu > 90% for 5 cycles then restart
  if 3 restarts within 5 cycles then timeout

Monit está configurado para monitorear el procedimiento de MySQL en ejecución. Si se cae, puede iniciarlo de nuevo con el start program = config. Si MySQL comienza a utilizar demasiados recursos, se puede reiniciar automáticamente, aún cuando primero se le advertirá por email.

Además se puede configurar para monitorear su sistema como un todo y puede alertarle si su servidor está experimentando una carga inusual.

check system wp01
  if loadavg(5min) > 1 then alert
  if memory usage > 90% for 5 cycles then alert
  if cpu usage (user) > 90% for 5 cycles then alert

Todo lo que Monit supervisa se puede ver desde la interfaz web, que se ejecuta en el puerto 2812 de forma predeterminada.

Al mismo tiempo, puede ver los datos de varios hosts en un solo lugar con el Utilidad M / Monit, que necesita una licencia pero es gratuito para probar.

RELACIONADO: Cómo configurar notificaciones de Slack para poco espacio en disco en su servidor

Instalación y configuración de Monit

Instalar Monit desde el administrador de paquetes de tu distribución; para sistemas basados ​​en Debian como Ubuntu, eso sería:

sudo apt-get install monit

Monit debería venir con la configuración predeterminada, de forma general localizada en ~/.monitrc. Si no lo hizo (como fue el caso con una instalación de macOS), puede hallar los archivos de configuración predeterminados aquí.

La interfaz web de Monit está configurada para ejecutarse en el puerto 2812. Está bien, pero está totalmente abierta de forma predeterminada con una contraseña predeterminada. Queremos bloquearlo en una dirección IP autorizada y

set httpd port 2812
    allow your_ip
    allow admin:password

Cambie esta contraseña, de todos modos. Hay una algunas opciones de configuración más para la interfaz web, pero esto es bueno por ahora.

Posteriormente, Monit se puede configurar para monitorear procesos individuales. Por lo general, esto se hace con el archivo PID de procesos (que a menudo se encuentra en /var/run/) que almacena el PID actual de la instancia en ejecución de ese procedimiento, puesto que el PID cambiará cada vez que se reinicie el procedimiento.

check process nginx with pidfile /var/run/nginx.pid
    start program = "/etc/init.d/nginx start"
    stop program = "/etc/init.d/nginx stop"

Deberá pasar un comando a Monit para iniciar y detener su procedimiento. Debería reiniciarse automáticamente si el procedimiento falla, sin configuración adicional, pero si desea reiniciar según el uso de recursos, tendrá que especificarlo usted mismo con algunos if declaraciones:

check process nginx with pidfile /var/run/nginx.pid
    start program = "/etc/init.d/nginx start"
    stop program = "/etc/init.d/nginx stop"
    if totalmem > 600 MB for 5 cycles then restart
    if cpu > 90% for 5 cycles then restart
    if 3 restarts within 5 cycles then timeout

Monit enviará alertas cada vez que se reinicie algo, por lo que se le notificará cuando algo esté mal.

Una vez que haya terminado con la configuración, vuelva a cargar el demonio monit con:

monit reload

Y comience a monitorear con:

monit start all

Esto además debería iniciar la interfaz web, que puede utilizar para verificar que Monit esté funcionando correctamente, de forma general ejecutándose en el puerto 2812.

Esta es la configuración básica para que Monit se ejecute de fábrica, pero Monit tiene mucha más sintaxis. Usted puede leer el manual completo fundamentalmente lo que Monit puede hacer para aprender más.

Configurar alertas

Monit se puede configurar para enviar alertas por email siempre que se produzcan problemas importantes o cuando se reinicien los procesos. Deberá agregar la configuración para su servidor de correo:

set mailserver smtp.gmail.com
  port 587
  username "[email protected]"
  password "secret"
  with timeout 60 seconds

set eventqueue
  basedir /var/lib/monit/events
  slots 100

El primer bloque establece el servidor de correo a usar. El método más sencillo sería utilizar smtp.gmail.com con una cuenta de Gmail, aún cuando puede instalar Postfix en su servidor para que se ejecute localmente o usar un servicio de email empresarial.

La segunda línea le dice a Monit que ponga en cola las alertas, si el servidor de correo no es alcanzable por cualquier motivo.

Evidentemente, además deberá configurar la dirección de email a la que envía:

set alert [email protected]

Al mismo tiempo, dado que Monit tiene la capacidad de ejecutar scripts con la exec comando, puede configurar alertas personalizadas como desee. A modo de ejemplo, puede configurar un script para enviarle notificaciones de Slack, almacenarlo como /usr/local/bin/slack-webhook.shy ejecútelo siempre que nginx cambie el PID o sea reiniciado por Monit:

check process nginx with pidfile /var/run/nginx.pid
  start program = "/etc/init.d/nginx start"
  stop program = "/etc/init.d/nginx stop"
  if changed pid then exec "/bin/bash -c 'PROCESS=Nginx /usr/local/bin/slack-webhook.sh'"
  if 1 restart within 1 cycle then exec "/bin/bash -c 'PROCESS=Nginx /usr/local/bin/slack-webhook.sh'"

Tenga en cuenta que todas las rutas deben estar totalmente calificadas, incluidas /bin/bash y rutas a ejecutables en su local bin. Y una vez que haya terminado de modificar los archivos de configuración, deberá volver a cargar Monit.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.