Skip to main content

Cerca

Elementi taggati con: Monit


 

Monitoriza tu servidor con Monit en GNU/Linux





#gnu/linux #monit #monitorización

[ es una gran herramienta de Código Abierto para administrar y monitorear sistemas Unix. Monit lleva a cabo el mantenimiento y la reparación automáticos y puede ejecutar acciones causales significativas en situaciones de error.

Aprovechando que quiero instalarlo en este servidor, donde está alojado este blog, he pensado que sería interesante aprovechar también para escribir este artículo.

En mi servidor únicamente tengo instalado un LAMP, por lo que en este caso no vamos a monitorear otro servicio que no sea un Apache, MySQL y alguna otra cosa más -SSH, disco, etc-.

Instalación de Monit en GNU/Linux


Desde la gran mayoría de distribuciones de GNU/Linux se puede instalar Monit desde los mismos repositorios utilizando el gestor de paquetes preferido:

Para distribuciones basadas en Debian GNU/Linux:
apt install monit

Para distribuciones basadas en Red Hat:
rpm -ivh [url=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm]https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm[/url] 

yum install monit

Configuración de Monit


Monit consta de un fichero de configuración que se encuentra en /etc/monit/monitrc y de un directorio donde añadir las diferentes configuraciones de los servicios en /etc/monit/conf.d.

Vamos a editar primero /etc/monit/monitrc y vamos a cambiar algunas cosas interesantes.

Activamos la Interfaz Web de Monit:
set httpd port 2812 and 

     use address 46.183.119.58 

     allow 0.0.0.0/0.0.0.0 

     allow admin:monit

Configuramos el servidor de SMTP que enviará las alertas:
set mailserver mail.midominio.com port 587 

     username email@midominio.com  password "Contraseña" 

     using TLSV1 with timeout 30 seconds 

     #email que recibirá alertas 

     set alert monit@midominio.com

Configuramos el formato del e-mail
set mail-format { 

     # Indica remitente válido para evitar SPAM 

     from: monit@midominio 

     subject: Monit Alert -- $EVENT $SERVICE 

     message: $EVENT Service $SERVICE 

     Date: $DATE 

     Action: $ACTION 

     Host: $HOST 

     Description: $DESCRIPTION 

     Monit VoidNull 

}

Ahora ya tenemos configurado Monit para que funcione correctamente. También podemos ejecutar monit -t para comprobar el estado de la sintaxis del fichero y ver que todo es correcto.

Configuración de los servicios


En este caso vamos a configurar diferentes servicios que tengo en mi servidor. Crearemos un fichero por configuración que meteremos dentro de /etc/monit/conf-enabled. Si nos fijamos en /etc/monit/conf-available podremos ver que tenemos un montón de ficheros preparados para ser usados, son ejemplos de configuraciones que nos pueden ser útiles.

Listado de servicios para monitorear:

* Espacio en disco duro

* Servidor Apache

* Servicio de SSH

* Servidor de MariaDB

Espacio en disco duro


Creamos el fichero de configuración /etc/monit/conf-enabled/disc donde añadiremos lo siguiente:
check filesystem "root" with path /dev/sda1 

if space usage > 90% for 8 cycles then alert 

if space usage > 95% then exec "/root/free-disk.sh" 

if inode usage > 90% for 8 cycles then alert 

if inode usage > 99% then exec "/root/free-disk.sh"

Lo que hacemos aquí es comprobar nuestro disco /dev/sda1 y lo hacemos tanto en espacio como inodos que tenga el disco. Cuando el disco llegue al 90% del uso, se enviará una notificación por e-mail. Si el disco duro llega al 95% la acción que he puesto es que se ejecute un script para vaciar contenido del servidor.

El script tiene el siguiente contenido:
#!/bin/bash 



apt-get clean 

apt-get autoclean 

rm -rf /tmp/\*

Básicamente borro caché de APT y luego libero espacio borrando ficheros de la carpeta temporal de sistema. Seguramente se puedan borrar también logs, pero a veces con un poco de espacio es suficiente para luego redimensionar el servidor o darse cuenta -que al fin de cuentas es lo importante-.

Pondremos permisos al script:
chmod 755 /root/free-disk.sh

Servidor Apache


Creamos el fichero de configuración /etc/monit/conf-enabled/apache2 donde añadiremos lo siguiente:
check process apache with pidfile /run/apache2/apache2.pid 

start program = "/etc/init.d/apache2 start" with timeout 60 seconds 

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

if cpu > 60% for 2 cycles then alert 

if cpu > 80% for 5 cycles then restart 

if totalmem > 200.0 MB for 5 cycles then restart 

if children > 250 then restart 

if loadavg(5min) greater than 10 for 8 cycles then stop 

if 3 restarts within 5 cycles then unmonitor

Aquí haremos que si la CPU está al 60% durante dos ciclos envíe una alerta, si la CPU está al 80% durante cinco ciclos haremos un reinicio del servicio Apache. Con la RAM haremos algo parecido, cuando quede poca RAM también haremos reinicio del servicio.

Servicio de SSH


Creamos el fichero de configuración /etc/monit/conf-enabled/ssh donde añadiremos lo siguiente:
check process sshd with pidfile /var/run/sshd.pid 

start program "/etc/init.d/ssh start" 

stop program "/etc/init.d/ssh stop" 

if failed port 22 protocol ssh then restart 

if 3 restarts within 5 cycles then unmonitor

Para SSH, lo que haremos es que si el puerto 22 falla, entonces haremos un reinicio del servicio SSH.

Servidor de MariaDB


Creamos el fichero de configuración /etc/monit/conf-enabled/mariadb donde añadiremos lo siguiente:
check process mysqld with pidfile /run/mysqld/mysqld.pid 

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

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

if failed host 127.0.0.1 port 3306 then restart 

if 3 restarts within 5 cycles then unmonitor

Con MariaDB haremos parecido al servicio SSH, si el puerto 3306 deja de estar operativo en localhost, lo que haremos será reiniciar el servicio de MariaDB.

Comprobando que Monit funciona correctamente


Ahora que tenemos los ficheros de configuración creados y hemos seleccionado una serie de ordenes que queremos que haga Monit con nuestros servicios, vamos a probar que funciona correctamente.

Podremos acceder a un entorno web que hemos activado antes utilizando el puerto 2812, así que accedemos ahora, pero antes reiniciamos el servicio de Monit:
systemctl restart monit


Interfaz web de Monit

Esto que voy hacer yo, no lo hagáis nunca, pero si paramos un servicio y volvemos a acceder a la web:


Monit con un servicio parado

He parado el servicio de Apache un momento para hacer la captura -en serio, esto en un servidor de producción no lo hagáis xD-

De acuerdo, tras hacer esta locura en mi servidor -en este servidor- hemos observador que en la interfaz web queda un mensaje en rojo, pero antes hemos configurado el correo para que Monit nos envíe correos cuando algo no esté funcionando correctamente.

Si consultamos el correo vemos que deberíamos de tener varios:
Does not exist Service apache 

    Date: Sat, 18 Aug 2018 15:14:08 

    Action: restart 

    Host: Freya 

    Description: process is not running 

    Monit VoidNull

Monit ha detectado que el servicio de Apache ha fallado, y ha procedido a reiniciar el servicio. Yo únicamente hice un stop del servicio, y Monit, lo levantó. Aún así, este correo es para informar de que el servicio no está ejecutándose.

Pero habremos recibido un correo más:
Exists Service apache 

    Date: Sat, 18 Aug 2018 15:16:08 

    Action: alert 

    Host: Freya 

    Description: process is running with pid 18683 

    Monit VoidNull

Aquí la vemos que el proceso de Apache se ha levantado y está funcionando de nuevo.

Conclusiones


Aquí hemos visto algunos ejemplos interesantes para monitorizar un servidor web sencillo. Pero con Monit puedes hacer mil y una cosas para controlar todo tipo de servicios, PIDs, ficheros, lo que se te ocurra.

Como siempre, si quieres aprender más y saber como hacer otras cosas es importante leerse la documentación de este maravilloso servicio.

Y una vez configures todo a tu gusto, solo tienes que esperar a que te envíen un correo para saber que algo anda mal.

La entrada Monitoriza tu servidor con Monit en GNU/Linux se publicó primero en _ voidNull.
Monitoriza tu servidor con Monit en GNU/Linux

 
Ayer con f del @Partido Interdimensional Pirata de Argentina nos* juntamos a armar esto:

Prosody Moderno @ 0xacab.org GitLab


La idea del proyecto es facilitar la tarea de levantar un servicio de #chat moderno, seguro** e interoperable.

Son dos archivos de configuración y un script que crea un container.

Detalles técnicos


Los archivos de configuración son: uno para la #monitorización incluída #Monit, y otro para el servidor de chat #Prosody.

El script es un Dockerfile: un achivo con instrucciones sobre cómo fabricar una imagen de #Docker (como los archivos Makefile de make).

El container está basado en #Alpine, y usa variables de entorno y envsubst para adaptar la configuración.

Eh! Yo quiero, también!


Quienes se den maña, están invitadxs a probarla, y colaborar o hacer su propia versión en base a esta.

Para reportar problemas, documentar o bifurcar (fork) el repositorio, se tienen que registrar en 0xacab.org.

Para clonar el repositorio, pueden tirar git clone https://0xacab.org/partido-interdimensional-pirata/prosody-moderno.git, sin necesidad de registrarse.
#XMPP #Jabber #IM
#XEPs #ComplianceTester #XEP-0387 #HTTPFileUpload #OMEMO #MAM #PushNotifications #MessageCarbons #StreamManagement
#containers #virtualización #aislamiento #automatización #orquestación
#español #ñ

*: más que nada lo armó él, en realidad :P yo fui a acompañar y a aprender (levanté un Prosody una vez, pero nunca había usado Docker)
**: a seguro se lo llevaron preso

 
Ayer con f del @Partido Interdimensional Pirata de Argentina nos* juntamos a armar esto:

Prosody Moderno @ 0xacab.org GitLab


La idea del proyecto es facilitar la tarea de levantar un servicio de #chat moderno, seguro** e interoperable.

Son dos archivos de configuración y un script que crea un container.

Detalles técnicos


Los archivos de configuración son: uno para la #monitorización incluída #Monit, y otro para el servidor de chat #Prosody.

El script es un Dockerfile: un achivo con instrucciones sobre cómo fabricar una imagen de #Docker (como los archivos Makefile de make).

El container está basado en #Alpine, y usa variables de entorno y envsubst para adaptar la configuración.

Eh! Yo quiero, también!


Quienes se den maña, están invitadxs a probarla, y colaborar o hacer su propia versión en base a esta.

Para reportar problemas, documentar o bifurcar (fork) el repositorio, se tienen que registrar en 0xacab.org.

Para clonar el repositorio, pueden tirar git clone https://0xacab.org/partido-interdimensional-pirata/prosody-moderno.git, sin necesidad de registrarse.
#XMPP #Jabber #IM
#XEPs #ComplianceTester #XEP-0387 #HTTPFileUpload #OMEMO #MAM #PushNotifications #MessageCarbons #StreamManagement
#containers #virtualización #aislamiento #automatización #orquestación
#español #ñ

*: más que nada lo armó él, en realidad :P yo fui a acompañar y a aprender (levanté un Prosody una vez, pero nunca había usado Docker)
**: a seguro se lo llevaron preso