Enterprise Lightweight Monitoring
Enterprise_Lightweight_Monitoring
Link al proyecto en Github
Introducción
Este proyecto implementa un sistema de monitorización y notificaciones de servicios a nivel empresarial o para un servidor “home”.
El objetivo principal es disponer de un script de comprobación adaptable a tus necesidades, por ejemplo:
- Controlar que un Domain Controller (DC) esté activo.
- Verificar un servidor NGINX o Mail Server.
- Monitorizar túneles VPN o cualquier otro servicio crítico.
El sistema consta de varias fases:
- Comprobación de servicios desde un equipo o servidor de la red interna.
- Implantación de notificaciones vía Email, Telegram o XMPP (el servidor de notificaciones se puede ubicar en la DMZ).
- Verificación de funcionamiento del servicio de notificaciones, ya que sin él no se puede monitorizar correctamente.
Este proyecto no cubre la instalación de MV’s, sistemas operativos, software u otras configuraciones de infraestructura.
Requisitos
- Sistema operativo: Unix/Linux (el laboratorio se centra en UNIX).
- Servidor de notificaciones: MV o LXC Alpine.
- Comprobador de servicios: Puede ser el mismo Alpine, otro servidor o un equipo de la red.
- Cuenta en Healthchecks.io u otro servicio similar para verificar que el servidor de notificaciones está “UP”.
- Prosody y sendxmpp instalado y configurado en alpine
- cron
- Tareas programadas (opcional, si tenemos cliente windows)
Verificar que Alpine está activo
- Crear una cuenta en Healthchecks.io.
- Crear un nuevo check y configurar las notificaciones (Email, WhatsApp, Telegram).
- Configurar el check para que se ejecute cada 5 minutos, con 1 minuto de periodo de gracia.
- Copiar la URL del ping generado por Healthchecks.
- En Alpine, agregar el ping al
crontab:
crontab -e
# Instalar curl si es necesario
apk add curl
# Agregar la tarea
*/5 * * * * curl -fsS https://hc-ping.com/8b9658d1-ce33-4b3d-97c3-73d32a536441 > /dev/null 2>&1
Esto asegura que recibas alertas si el servidor de notificaciones cae.
Comprobación de servicios
script_network_devices.cmd El script de comprobación tiene las siguientes características:
- Realiza 3 pings a cada dispositivo y genera un log (network.log) con el resultado: OK, ERROR o FLUCTUA.
- Crea un log de cambios (network_full.log) solo cuando hay variaciones respecto a la ejecución anterior.
- Los logs se suben al servidor Alpine vía scp usando acceso por claves públicas.
- Los dispositivos y sus IPs se pueden personalizar según la red.
Se recomienda tener una tarea programada que periódicamente realize esta comprobación.
Editar el script de comprobación para indicar a quien subimos el log y que direcciones IP vamos a comprobar de la siguiente manera:
REM === Lista de dispositivos ===
REM Formato: IP Nombre
call :check 192.168.1.100 MI_PUERTA_DE_ENLACE
call :check 192.168.1.110 MI_SERVICIO_DC
...
REM === Subir logs al servidor remoto ===
echo Subiendo logs al servidor remoto...
scp "%CURLOG%" admin@102.197.68.60:/tmp/network.log
if errorlevel 1 echo ERROR al subir "%CURLOG%"
scp "%FULLLOG%" admin@102.197.68.60:/tmp/network_full.log
if errorlevel 1 echo ERROR al subir "%FULLLOG%"
scp "%PREVLOG%" admin@102.197.68.60:/tmp/network_prev.log
if errorlevel 1 echo ERROR al subir "%PREVLOG%"
Envío de notificaciones
Se utiliza XMPP (Prosody) en Alpine para enviar alertas y reportes a tu dispositivo:
- sendxmpp_network_daily.sh: envía un resumen diario de conectividad.
- sendxmpp_network_alert.sh: envía alertas en caso de cambios de estado.
- sendxmpp_network_alert_admin_connection.sh (opcional): notifica pérdida de conectividad con el equipo que envía las novedades.
Para ello se debe instalar y configurar previamente prosody y sendxmpp y luego editar los scripts para elegir a quien se envía la notificación, además de configurar tareas cron para realizar esto de manera periódica.
Ejemplo para modificar los contactos que recibirán notificaciones
XMPP_USER=admin@xmpp.local
XMPP_PASSWORD=Mipassword
XMPP_SERVER=192.168.1.1
RECIPIENTS="admin1@xmpp.local admin2@xmpp.local admin3@xmpp.local"
LOG_FILE="/tmp/network.log"
Ejemplo de tarea cron
# La tarea para comprobar con healthchecks que Alpine está corriendo bien
*/5 * * * * curl -fsS https://hc-ping.com/8b9658d1-ce33-4b3d-97c3-73d32a5362cf >/dev/null 2>&1
# Tarea para enviar novedades de los servicios a las 7AM
0 7 * * * /home/admin/sendxmpp_network_daily.sh >> /home/admin/cron_daily_log.txt 2>&1
# Tarea para enviar alertas si hay cambios en la conectividad
*/5 * * * * /bin/bash /home/admin/sendxmpp_network_alert.sh >> /home/admin/cron_alert_log.txt 2>&1
# Tarea opcional para notificar si se ha perdido conectividad con el cliente que nos envía las novedades
*/5 * * * * /home/admin/sendxmpp_network_alert_admin_connection.sh >> /home/admin/cron_admin_conn_log.txt
Resumen
- Clonar repo con scripts y alamcenar donde queramos
- Creación cuenta healthchecks
- Instalar y configurar prosody y sendxmpp
- Configurar los scripts:
- script_network_devices.cmd: configurar ip’s a monitorizar, ip y ruta de donde subiremos los logs
- sendxmpp_network_daily.sh: credenciales de cliente xmpp, destinatarios, fichero de log
- sendxmpp_network_alert.sh: credenciales de cliente xmpp, destinatarios, fichero de log
- sendxmpp_network_alert_admin_connection.sh: ip del equipo que queremos comprobar, credenciales de cliente xmpp, destinatarios, fichero de log
- Configurar tareas programadas (windows) y tareas cron (alpine)