
Un servidor Linux puede fallar de muchas formas: un servicio se cae, el disco se llena, la CPU se dispara, la memoria se agota, una base de datos deja de responder o el sitio web empieza a devolver errores. El problema no es solo que ocurra la falla, sino enterarse demasiado tarde.
Un sistema de alertas bien diseñado permite recibir avisos antes de que el incidente se convierta en caída total. Para lograrlo, puedes empezar con scripts Bash y cron, usar systemd OnFailure para avisar cuando falle un servicio, apoyarte en Monit para acciones automáticas, o implementar una solución más completa con Prometheus, Node Exporter, Alertmanager y Grafana. Prometheus separa las alertas en dos partes: reglas evaluadas por Prometheus y gestión/envío de notificaciones mediante Alertmanager.
Idea central: no basta con mirar el servidor cuando algo falla. Debes automatizar alertas para servicios caídos, disco lleno, CPU alta, memoria crítica, puertos cerrados, errores HTTP y backups que no se ejecutaron.
1. Qué debe vigilar un servidor Linux
El monitoreo mínimo debe cubrir disponibilidad, recursos, seguridad básica y tareas programadas. Node Exporter, por ejemplo, expone métricas de hardware y kernel para Prometheus, incluyendo métricas de CPU, filesystem y red como node_cpu_seconds_total, node_filesystem_avail_bytes y node_network_receive_bytes_total.
| Elemento | Alerta recomendada | Acción inicial |
|---|---|---|
| Servicio caído | nginx, apache2, mysql, postgresql, ssh, docker o app crítica inactiva. | Revisar logs, reiniciar controladamente y analizar causa. |
| Disco lleno | Uso mayor a 80 %, 90 % o 95 % según criticidad. | Limpiar logs, revisar backups, ampliar volumen o mover datos. |
| CPU alta | Uso sostenido mayor a 85 % durante varios minutos. | Identificar procesos, revisar tráfico, consultas, jobs o ataques. |
| Memoria crítica | RAM disponible baja o uso excesivo de swap. | Revisar procesos, leaks, contenedores y límites. |
| Backup fallido | El job no se ejecutó o terminó con error. | Ver logs, espacio, permisos, red y destino del backup. |
2. Arquitectura recomendada: simple, media y profesional
No todos los servidores necesitan la misma arquitectura. Un VPS pequeño puede empezar con Bash y Telegram; una pyme puede usar Monit o Uptime Kuma; una infraestructura con varios servidores debería usar Prometheus, Alertmanager y Grafana. Grafana Alerting permite definir puntos de contacto y políticas de notificación para enviar alertas por canales como correo, Slack, sistemas de guardia o webhooks.
| Nivel | Herramientas | Cuándo usarlo |
|---|---|---|
| Básico | Bash + cron + correo/Telegram. | Uno o pocos servidores, bajo presupuesto, alertas rápidas. |
| Intermedio | systemd OnFailure, Monit, Uptime Kuma, Healthchecks. | Servicios críticos, reinicio automático, monitoreo visual simple. |
| Profesional | Prometheus + Node Exporter + Alertmanager + Grafana. | Varios servidores, métricas históricas, alertas por umbrales y paneles. |
3. Sistema básico con Bash: alerta por disco lleno
El primer script útil debe avisar cuando una partición supera un umbral. Esto evita caídas por logs descontrolados, backups acumulados, bases de datos creciendo sin control o archivos temporales olvidados.
Este script todavía solo escribe en pantalla y en syslog mediante logger. El siguiente paso es conectarlo a un canal real de notificación.
4. Enviar alertas por Telegram usando curl
Una forma sencilla de recibir avisos es usar un webhook o una API de mensajería. El patrón se repite para Telegram, Slack, Discord, Gotify o un endpoint propio: el script detecta la condición y envía un mensaje HTTP con curl.
Precaución: guarda tokens, chat IDs y webhooks en archivos con permisos restringidos. No subas credenciales a GitHub, tickets, capturas o documentación pública.
Con esa función, el script de disco puede enviar la alerta directamente al celular.
5. Alerta por CPU alta
La CPU alta no siempre es un problema. Puede ser normal durante backups, compresión, reportes o procesamiento. La alerta debe activarse cuando la carga se mantiene por varios minutos, no por un pico de segundos.
Para producción, conviene guardar el último estado y evitar enviar cientos de mensajes repetidos. Una regla sana es avisar al superar el umbral, esperar un período de enfriamiento y enviar otro aviso solo si la condición continúa.
6. Alerta cuando falle un servicio systemd
systemd permite controlar servicios y también definir acciones ante fallos. La directiva OnFailure= puede asociar una unidad que se ejecute cuando otra unidad falla, y Restart=on-failure permite reiniciar servicios cuando el proceso termina con error, por señal, timeout o watchdog.
Luego agrega una configuración adicional al servicio crítico. Por ejemplo, para Nginx:
7. Programar revisiones con cron
Para los scripts de disco y CPU, puedes usar cron cada cinco minutos. La clave es no saturar el canal de alertas; por eso conviene agregar control de repetición o enviar solo cambios de estado.
Para jobs críticos, también puedes usar monitoreo tipo “heartbeat”. Healthchecks.io documenta un modelo simple: el cron job envía un ping HTTP cuando termina; si el ping no llega a tiempo, se genera una notificación.
8. Monit: una solución simple para alertar y actuar
Monit es útil cuando quieres que el servidor tome acciones automáticas: reiniciar un daemon caído, alertar por CPU alta, revisar memoria, vigilar procesos y ejecutar acciones si algo falla. Su documentación indica que puede monitorear procesos locales y actuar ante errores, por ejemplo reiniciar servicios o enviar alertas.
Monit es directo y rápido para servidores individuales. Para muchos servidores, métricas históricas y paneles centralizados, Prometheus y Grafana suelen ser una mejor base.
9. Prometheus + Node Exporter: métricas profesionales
Prometheus puede recolectar métricas periódicamente desde Node Exporter. La guía oficial muestra una configuración donde Prometheus scrapea Node Exporter en localhost:9100 y luego permite consultar métricas desde su expression browser.
10. Reglas Prometheus para disco, CPU y servidor caído
Las reglas de alerta deben evitar falsos positivos. Por eso se usa for: para exigir que la condición dure cierto tiempo antes de disparar la alerta. Alertmanager luego se encarga de agrupar, silenciar, inhibir y enviar notificaciones.
11. Alertmanager: enviar notificaciones
Alertmanager se configura con un archivo que define rutas, receptores, agrupación, silencios e integraciones. La documentación oficial explica que el archivo de configuración define reglas de inhibición, ruteo de notificaciones y receptores.
En producción, el receptor puede ser correo, Slack, PagerDuty, Opsgenie, webhook propio o una integración corporativa. Lo importante es definir prioridades: una alerta crítica debe llegar a quien puede actuar, no a una bandeja que nadie revisa.
12. Grafana: paneles y alertas visuales
Grafana ayuda a visualizar métricas y también a gestionar alertas. Su documentación indica que las notificaciones se envían a puntos de contacto y pueden rutearse mediante políticas de notificación; además, Grafana puede agrupar alertas relacionadas para reducir ruido.
Paneles recomendados en Grafana
- CPU: uso promedio, carga y procesos principales.
- Memoria: RAM disponible, swap y presión de memoria.
- Disco: uso por filesystem, I/O y crecimiento.
- Red: tráfico entrante/saliente, errores y paquetes descartados.
- Servicios: disponibilidad de endpoints y estado de aplicaciones.
- Alertas: estado actual, severidad, historial y responsables.
13. Uptime Kuma: opción visual rápida para disponibilidad
Uptime Kuma es una herramienta self-hosted útil para monitorear disponibilidad de HTTP, TCP, ping, DNS, Docker containers y otros tipos de checks. Su README indica que soporta notificaciones por Telegram, Discord, Gotify, Slack, Pushover, SMTP y más de 90 servicios.
Es especialmente útil para saber si una URL, API, puerto TCP o servicio externo responde. Para métricas internas como CPU, disco o memoria, Prometheus y Node Exporter son más adecuados.
14. Logs: alertar también exige investigar
Cuando llega una alerta, el siguiente paso es revisar logs. journalctl permite filtrar por prioridad, por unidad, por arranque y por rangos de tiempo, lo que facilita investigar errores recientes de servicios.
El comando ss sirve para inspeccionar sockets; su manual lo describe como herramienta para mostrar estadísticas de sockets, útil cuando una alerta indica que un servicio no responde o un puerto no está escuchando.
15. Evitar ruido: el enemigo silencioso del monitoreo
Un sistema que alerta demasiado termina siendo ignorado. Las alertas deben ser accionables: deben indicar qué ocurre, dónde ocurre, desde cuándo, qué tan grave es y qué acción inicial tomar.
Buenas reglas para reducir ruido
- Usa duración: CPU alta durante 10 minutos, no por 5 segundos.
- Agrupa alertas: varias alertas del mismo servidor deben llegar juntas.
- Define severidad: warning, critical y emergency no deben tratarse igual.
- Agrega contexto: servidor, métrica, valor, umbral y comando de diagnóstico.
- Evita repetición: usa repeat_interval o archivo de estado.
- Envía al responsable correcto: no todas las alertas deben ir a todos.
16. Umbrales recomendados para empezar
Los umbrales dependen del tipo de servidor. Un servidor de base de datos, un proxy web, un nodo Docker y un servidor de archivos tienen patrones distintos. Empieza con umbrales conservadores y ajústalos según comportamiento real.
| Recurso | Warning | Critical |
|---|---|---|
| Disco | Más de 80 % o 85 %. | Más de 90 % o 95 %. |
| CPU | Más de 80 % por 10 minutos. | Más de 95 % por 5 minutos. |
| Memoria | Disponible menor a 15 %. | Disponible menor a 5 % o swap creciendo. |
| Servicio crítico | Reinicio inesperado. | Servicio caído más de 1 a 2 minutos. |
17. Checklist para implementar alertas en Linux
Checklist técnico
- Inventariar servicios críticos: web, base de datos, SSH, Docker, colas, backups y APIs.
- Definir umbrales: disco, CPU, memoria, red, latencia y errores.
- Elegir canal: correo, Telegram, Slack, webhook, SMS o sistema de guardia.
- Crear alertas básicas: servicio caído, disco lleno y CPU alta.
- Agregar logs: cada alerta debe dejar registro local.
- Evitar repetición: agrupar, silenciar o espaciar alertas.
- Probar fallos: detener un servicio de prueba y verificar aviso.
- Documentar respuesta: qué hacer ante cada tipo de alerta.
- Escalar arquitectura: pasar de Bash a Prometheus/Grafana cuando crezca el entorno.
- Revisar mensualmente: ajustar umbrales y eliminar alertas inútiles.
18. Errores comunes
- Configurar alertas que nadie recibe o nadie revisa.
- Enviar demasiados mensajes por el mismo problema.
- No diferenciar warning de critical.
- Alertar por picos breves de CPU sin duración mínima.
- No monitorear el propio sistema de monitoreo.
- No probar los avisos después de configurarlos.
- Guardar tokens de Telegram, Slack o SMTP en archivos públicos.
- Reiniciar servicios automáticamente sin investigar la causa.
- Medir solo disponibilidad y no recursos internos.
- No documentar el procedimiento de respuesta.
19. Preguntas clave
¿Cuál es la forma más simple de crear alertas en Linux?
La forma más simple es usar scripts Bash con cron y enviar mensajes por correo, Telegram o webhook. Es suficiente para empezar con alertas de disco, CPU y servicios básicos.
¿Qué uso para alertar cuando falla un servicio?
systemd permite usar OnFailure= para disparar una unidad cuando un servicio falla, y Restart=on-failure para reiniciar servicios bajo determinadas condiciones de error.
¿Prometheus sirve para monitorear servidores Linux?
Sí. Prometheus puede recolectar métricas de Node Exporter, y Node Exporter expone métricas de CPU, disco, red y filesystem útiles para alertas de infraestructura.
¿Monit puede reiniciar servicios automáticamente?
Sí. Monit puede monitorear procesos locales y tomar acciones ante errores, como reiniciar servicios o enviar alertas.
¿Uptime Kuma reemplaza a Prometheus?
No necesariamente. Uptime Kuma es muy útil para monitoreo de disponibilidad y notificaciones visuales; Prometheus es más fuerte para métricas internas, series de tiempo, alertas por umbrales y análisis histórico.
Recomendamos
- 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 saber qué procesos se ejecutan en Linux: guía completa para identificar, controlar, detener procesos sospechosos
- Cómo saber qué programa está usando un puerto en Linux y solucionar conflictos de red paso a paso
- Cómo saber si tu Linux está bien protegido: 30 comprobaciones de seguridad que puedes realizar ahora mismo
- Cómo proteger un servidor Linux contra ataques DDoS: configuración, monitoreo y medidas de mitigación
En resumen
Crear un sistema de alertas para servidores Linux es una tarea esencial para cualquier administrador. Puedes empezar con Bash, cron y Telegram para alertas simples; usar systemd OnFailure para servicios caídos; aplicar Monit para reinicios y acciones automáticas; y escalar hacia Prometheus, Node Exporter, Alertmanager y Grafana cuando necesites métricas históricas, paneles y notificaciones profesionales.
La meta no es recibir más mensajes, sino recibir los avisos correctos en el momento correcto. Una buena alerta debe ser clara, accionable, priorizada y útil para resolver el problema antes de que afecte a usuarios, clientes o servicios críticos.
Cierre editorial
Un servidor sin alertas es un servidor administrado a ciegas. Linux ofrece todas las piezas para evitarlo: scripts, systemd, logs, métricas, exporters, paneles y notificaciones. La diferencia entre una caída silenciosa y una respuesta profesional está en haber preparado las alertas antes del incidente.

