
Un monitor de servidores con Python permite detectar problemas antes de que se conviertan en caídas reales. Con pocas líneas bien organizadas puedes revisar CPU, memoria RAM, swap, disco, servicios críticos y enviar alertas automáticas cuando algo supera un umbral definido.
Python es ideal para este tipo de tareas porque cuenta con bibliotecas maduras como psutil, que permite obtener información de procesos y uso del sistema, incluyendo CPU, memoria, discos, red y sensores. Además, la biblioteca estándar incluye módulos como smtplib para enviar correos SMTP y logging para registrar eventos en archivos.
Idea central: el objetivo no es reemplazar a Prometheus, Zabbix o Wazuh, sino crear un monitor liviano, entendible y adaptable para servidores pequeños, laboratorios, VPS, proyectos internos o alertas rápidas de administración Linux.
1. Qué debe vigilar un monitor básico de servidores
Un monitor útil debe revisar los recursos que suelen causar incidentes: CPU alta, RAM agotada, swap excesiva, disco lleno, servicios caídos y errores repetidos. También debe evitar alertas duplicadas cada minuto, por lo que necesita un mecanismo de enfriamiento o cooldown.
| Elemento | Qué revisar | Ejemplo de alerta |
|---|---|---|
| CPU | Porcentaje de uso promedio. | CPU superior a 85 %. |
| RAM | Uso de memoria física. | RAM superior a 90 %. |
| Disco | Uso por partición o punto de montaje. | /var o / supera 85 %. |
| Servicios | Estado de nginx, ssh, mariadb, docker, etc. | nginx.service no está activo. |
2. Arquitectura del monitor
La arquitectura será sencilla: un script Python lee un archivo de configuración, revisa métricas del servidor, valida umbrales, genera logs, guarda estado de alertas y envía notificaciones por correo o webhook. Para ejecutarlo periódicamente, usaremos systemd timer, que permite activar servicios en intervalos mediante opciones como OnBootSec y OnUnitActiveSec.
3. Preparar el entorno en Linux
El monitor se puede instalar en cualquier servidor Linux con Python 3. La única dependencia externa será psutil. Para evitar contaminar el sistema, conviene usar un entorno virtual.
4. Crear el archivo de configuración
El archivo de configuración define umbrales, discos vigilados, servicios críticos y métodos de alerta. Para simplificar, usaremos JSON, soportado por la biblioteca estándar de Python mediante funciones como json.load y json.dump.
Los secretos no deben ir en este JSON. Las credenciales de correo, tokens o URLs privadas deben almacenarse en variables de entorno o en un archivo protegido por permisos restrictivos.
5. Crear el script principal del monitor
Este script revisa CPU, RAM, swap, disco y servicios systemd. Usa psutil.cpu_percent, psutil.virtual_memory y psutil.disk_usage, funciones documentadas por psutil para consultar uso del sistema.
El script usa RotatingFileHandler para evitar que el archivo de log crezca sin límite. Python documenta este manejador como parte de logging.handlers, con soporte para rotación de archivos en disco.
6. Proteger permisos y ejecutar una prueba
Una vez creado el script, asigna permisos adecuados. El monitor necesita leer métricas y consultar servicios, pero no debe tener permisos de administrador para modificar el servidor.
Recomendación: empieza con umbrales moderados y revisa varios días de comportamiento normal. No pongas alertas demasiado sensibles, porque terminarás ignorándolas.
7. Configurar alertas por correo
Python incluye smtplib, que permite crear una sesión cliente SMTP para enviar correos. La documentación oficial recomienda construir el mensaje con el paquete email y enviarlo con métodos como send_message.
Crea un archivo de variables de entorno separado. No guardes contraseñas dentro del script.
8. Configurar alertas por webhook
El webhook permite enviar alertas a sistemas externos: ChatOps, un endpoint interno, n8n, Node-RED, Slack, Mattermost, Discord, Telegram mediante un puente o una API propia. En el script usamos urllib.request, módulo estándar de Python para abrir URLs y realizar solicitudes HTTP.
9. Ejecutar el monitor automáticamente con systemd
En servidores Linux modernos, systemd permite crear un servicio y un temporizador. La idea es que el servicio ejecute el script una sola vez y el timer lo dispare cada cierto intervalo.
journalctl permite consultar registros del journal de systemd y filtrar por unidad, tiempo y otros campos, lo que facilita revisar ejecuciones del monitor y diagnosticar fallos.
10. Umbrales recomendados para empezar
Los umbrales dependen del tipo de servidor. Un servidor de base de datos puede usar mucha RAM de forma normal; un servidor web puede tener picos breves de CPU; un servidor de backups puede llenar disco temporalmente durante una ventana de copia. Por eso, los valores iniciales deben ajustarse con observación real.
| Métrica | Umbral inicial | Comentario |
|---|---|---|
| CPU | 85 % | Alertar si se mantiene alta de forma repetida. |
| RAM | 90 % | En Linux, parte de la memoria se usa como caché; interpreta con cuidado. |
| Swap | 50 % | Swap alta puede indicar falta de RAM o procesos pesados. |
| Disco | 85 % | En /var, /tmp y bases de datos conviene ser más estricto. |
| Servicio caído | Inmediato | nginx, ssh, mariadb, docker o aplicación crítica. |
11. Qué servicios conviene vigilar
No todos los servicios tienen la misma importancia. El monitor debe centrarse en los componentes que sostienen la operación del servidor.
Servicios típicos por tipo de servidor
- Servidor web: nginx.service, apache2.service, php-fpm.service.
- Base de datos: mariadb.service, mysql.service, postgresql.service.
- Contenedores: docker.service, containerd.service.
- Acceso remoto: ssh.service o sshd.service.
- Correo: postfix.service, dovecot.service.
- Monitoreo: wazuh-agent.service, node_exporter.service, grafana-server.service.
12. Mejoras recomendadas para una versión empresarial
El script anterior es una base. Para una empresa, conviene evolucionarlo hacia una solución con inventario, etiquetas por servidor, niveles de criticidad, dashboards y centralización.
| Mejora | Beneficio |
|---|---|
| Etiquetas por servidor | Identificar ambiente, área, criticidad y responsable. |
| Alertas por severidad | Separar avisos informativos, advertencias y críticos. |
| Histórico de métricas | Detectar tendencias antes de una caída. |
| Integración con tickets | Crear incidencias automáticamente para seguimiento. |
| Centralización | Enviar eventos a un servidor principal, SIEM o dashboard. |
13. Seguridad del monitor
Un monitor también puede convertirse en riesgo si se administra mal. No debe guardar contraseñas sin protección, no debe ejecutar comandos arbitrarios, no debe reiniciar servicios automáticamente sin reglas claras y no debe exponer un webhook público sin autenticación.
Controles mínimos
- No ejecutar como root si no es necesario: consultar métricas no requiere privilegios completos.
- Proteger secretos: archivo monitor.env con permisos 600.
- No permitir comandos libres: nada de ejecutar instrucciones recibidas por webhook.
- Limitar alertas: usar cooldown para evitar spam.
- Registrar todo: errores, alertas enviadas, fallos de correo y servicios caídos.
- Validar servicios: solo revisar servicios definidos en configuración.
14. Diagnóstico cuando no llegan alertas
Si el monitor no alerta, revisa primero systemd, logs del script, variables de entorno y conectividad SMTP o webhook.
15. Checklist de implementación
Checklist técnico
- Instalar Python 3 y psutil.
- Crear carpetas: /opt/server-monitor, /etc/server-monitor, /var/lib/server-monitor y /var/log/server-monitor.
- Definir umbrales: CPU, RAM, swap y disco.
- Listar servicios críticos: web, base de datos, SSH, contenedores y aplicación principal.
- Configurar correo o webhook: sin poner secretos dentro del código.
- Probar ejecución manual: confirmar métricas, logs y alertas.
- Crear servicio systemd: ejecución oneshot.
- Crear timer systemd: intervalo de 5 minutos o según criticidad.
- Verificar logs: journalctl y archivo propio del monitor.
- Ajustar umbrales: según comportamiento real del servidor.
- Documentar: responsable, servidor, servicios vigilados y correo de alertas.
16. Errores comunes
- Poner umbrales demasiado bajos y generar alertas inútiles.
- No usar cooldown y enviar cientos de correos por el mismo problema.
- Guardar contraseñas directamente en el script.
- No revisar el log del propio monitor.
- Vigilar servicios con nombres incorrectos.
- Ejecutar el monitor como root sin necesidad.
- No probar manualmente antes de activar el timer.
- No verificar que el correo SMTP realmente permite envío desde el servidor.
- Olvidar particiones importantes como /var, /home o discos de base de datos.
- Creer que un script simple reemplaza una plataforma completa de observabilidad.
17. Preguntas clave
¿Puedo monitorear un servidor Linux solo con Python?
Sí. Con Python y psutil puedes leer CPU, memoria, swap, disco y procesos. Para servicios systemd, puedes consultar systemctl is-active desde el script y generar alertas si un servicio crítico cae.
¿Cada cuánto debe ejecutarse el monitor?
Para un VPS o servidor pequeño, cada 5 minutos es razonable. Para sistemas críticos, puede ser cada minuto, pero cuidando el cooldown para evitar spam. Para métricas históricas y dashboards avanzados conviene usar herramientas especializadas.
¿Es mejor cron o systemd timer?
Ambos funcionan, pero systemd timer se integra mejor con servicios, logs y control de estado. Además, permite activar unidades en intervalos usando opciones como OnBootSec y OnUnitActiveSec.
¿Debo reiniciar servicios automáticamente?
No al inicio. Primero alerta y registra. El reinicio automático puede ser útil, pero solo con reglas claras, límites, evidencias y exclusiones para evitar bucles de caída.
¿Este monitor reemplaza a Zabbix, Prometheus o Wazuh?
No. Es una solución ligera para aprendizaje, VPS, laboratorios o alertas simples. En empresas con muchos servidores, lo ideal es centralizar métricas, logs, eventos y tableros en una plataforma de observabilidad o seguridad.
Recomendamos
- Cómo crear un sistema de alertas para servidores Linux: recibe avisos cuando falle un servicio, se llene el disco o aumente la CPU
- Python para ciberseguridad: 20 proyectos prácticos para aprender automatización, redes y análisis de seguridad
- Cómo aprender Bash creando 20 scripts útiles para administrar Linux y automatizar servidores
- Comandos básicos que debes aprender para administrar tu servidor Linux
- Guía completa de redes en Linux: comandos, diagnóstico, configuración y solución de problemas
- Cómo crear un sistema de gestión de vulnerabilidades con software libre: inventario, CVE, prioridades, parches y seguimiento
En resumen
Crear un monitor de servidores con Python es una excelente forma de aprender administración Linux, automatización y observabilidad básica. Con psutil puedes medir CPU, RAM, swap y disco; con systemctl puedes revisar servicios; con smtplib o webhooks puedes enviar alertas; y con systemd timer puedes ejecutar el control cada pocos minutos de forma ordenada.
La clave está en hacerlo con criterio: umbrales razonables, logs, cooldown, secretos protegidos, servicios bien definidos y pruebas antes de producción. Un monitor simple no reemplaza a una plataforma empresarial, pero puede evitar muchas caídas silenciosas y dar al administrador una alerta temprana cuando el servidor empieza a fallar.
Cierre editorial
Python permite convertir una necesidad diaria de administración Linux en una herramienta real: medir, comparar, registrar y alertar. Un buen servidor no solo debe estar funcionando; debe avisarte antes de fallar. Ese es el primer paso hacia una operación más profesional, preventiva y segura.

