Cómo detectar servicios colgados y reiniciarlos automáticamente en tu empresa
Cómo detectar servicios colgados y reiniciarlos automáticamente en tu empresa
Un servicio crítico caído durante solo 1 hora puede costar a una PYME entre 1.000 y 10.000 EUR en productividad perdida, dependiendo del servicio afectado (Gartner, IT Key Metrics Data, 2024). El servidor web de tu ecommerce, el servicio de correo, el ERP, la base de datos: cuando uno de estos se cuelga y nadie lo detecta a tiempo, el impacto se multiplica con cada minuto. En IBERSYA configuramos sistemas de monitorización con Zabbix que no solo detectan servicios caídos en segundos, sino que los reinician automáticamente antes de que el negocio se vea afectado.
Por qué los servicios se cuelgan y qué impacto tiene
Un servicio de Windows o Linux puede quedarse colgado por múltiples razones:
- Fugas de memoria (memory leaks): la aplicación consume RAM progresivamente hasta agotar los recursos del servidor. Según un estudio de Dynatrace (2024), las fugas de memoria son la causa del 30 % de las caídas de aplicaciones en producción.
- Deadlocks: dos procesos se bloquean mutuamente esperando recursos del otro.
- Saturación de conexiones: el servicio alcanza el límite máximo de conexiones simultáneas y deja de responder a nuevas peticiones.
- Errores de disco: sectores defectuosos o disco lleno que impiden al servicio escribir logs o datos temporales.
- Actualizaciones fallidas: un parche o actualización deja el servicio en estado inconsistente.
Impacto en el negocio
Según el IT Service Management Forum (itSMF, 2024), el coste del downtime para PYMEs europeas se distribuye así:
- Servicio de correo electrónico: impacta al 100 % de la plantilla. Coste estimado: 200-500 EUR/hora para una empresa de 20 empleados.
- ERP/facturación: paraliza operaciones comerciales y logísticas. Coste: 500-2.000 EUR/hora.
- Servidor web/ecommerce: pérdida directa de ventas. Coste variable según facturación.
- Base de datos: puede afectar a múltiples aplicaciones simultáneamente. Coste: el más alto si es transversal.
Las empresas con SLAs (acuerdos de nivel de servicio) internos o con clientes necesitan garantizar una disponibilidad mínima del 99,5 % (equivale a un máximo de 43 horas de downtime al año) o del 99,9 % (8,7 horas/año). Sin monitorización y auto-remediación, cumplir estos niveles es prácticamente imposible.
Configurar la detección automática con Zabbix
Zabbix es una plataforma de monitorización open source de nivel empresarial que en IBERSYA utilizamos como estándar para todos nuestros clientes. Permite monitorizar servidores Windows y Linux, servicios, aplicaciones, red y hardware.
1. Instalar el agente Zabbix en cada servidor
En Windows, descarga el agente desde zabbix.com e instálalo como servicio:
# Instalación silenciosa del agente Zabbix en Windows
msiexec /i zabbix_agent2-7.0.0-windows-amd64.msi /qn SERVER=IP_ZABBIX HOSTNAME=NOMBRE_SERVIDOR
En Linux (Debian/Ubuntu):
apt install zabbix-agent2
systemctl enable zabbix-agent2
systemctl start zabbix-agent2
2. Crear items de monitorización de servicios
En la interfaz web de Zabbix, accede al host del servidor y crea items para cada servicio crítico:
Para servicios de Windows:
- Key:
service.info[NombreServicio,state] - Tipo de información: Numérico (entero)
- Intervalo de comprobación: 30 segundos para servicios críticos, 60 segundos para el resto.
Ejemplos de nombres de servicio comunes: MSSQLSERVER (SQL Server), W3SVC (IIS), Spooler (Impresión), OdooService (Odoo).
Para procesos en Linux:
- Key:
proc.num[nombre_proceso] - Devuelve el número de procesos activos. Si el resultado es 0, el servicio está caído.
3. Configurar triggers (alertas)
Los triggers definen las condiciones que activan una alerta:
# Trigger: servicio Windows detenido
{host:service.info[NombreServicio,state].last()}<>0
Configura la severidad del trigger según la criticidad del servicio: “High” para ERP y bases de datos, “Average” para servicios secundarios.
4. Configurar notificaciones
Zabbix envía notificaciones por múltiples canales:
- Email: al equipo de IT y al responsable del servicio.
- Telegram / Slack: para respuesta inmediata del equipo de guardia.
- SMS: para incidencias críticas fuera de horario laboral.
Configura escalado: si el servicio no se recupera en 5 minutos, notifica al siguiente nivel de soporte. Si no se recupera en 15 minutos, notifica a la dirección técnica.
5. Configurar acciones de auto-remediación
Esta es la funcionalidad más potente de Zabbix: ante un trigger activo, puede ejecutar comandos remotos para reiniciar el servicio automáticamente.
Configuración en Zabbix:
- Ve a Configuración > Acciones > Trigger actions.
- Crea una nueva acción con las siguientes condiciones:
- Trigger severity: “High” o superior.
- Trigger name: contiene el nombre del servicio.
- En Operaciones, selecciona Comando remoto:
- Tipo: Zabbix agent
- Comando (Windows):
net stop NombreServicio && net start NombreServicio - Comando (Linux):
systemctl restart nombre-servicio
- Configura un paso de recuperación: si el reinicio automático no resuelve el problema en 2 minutos, notifica al equipo de IT para intervención manual.
6. Definir límites de reinicio
Para evitar bucles infinitos de reinicio (que pueden enmascarar un problema grave), configura:
- Máximo 3 reinicios automáticos por servicio en un periodo de 1 hora.
- Si tras 3 intentos el servicio sigue caído, Zabbix marca el trigger como “no resuelto” y envía una alerta de escalado.
- Registra cada reinicio automático en el log de Zabbix para análisis posterior.
Auto-remediación con scripts PowerShell en Windows
Para entornos sin Zabbix o como complemento, puedes usar scripts de PowerShell ejecutados por el Programador de tareas de Windows:
Script de monitorización y reinicio automático
# Script: Monitor-Services.ps1
# Monitoriza servicios críticos y los reinicia si están detenidos
$servicios = @("MSSQLSERVER", "W3SVC", "OdooService", "Spooler")
$logFile = "C:\Logs\service-monitor.log"
$maxReinicios = 3
$periodoHoras = 1
foreach ($servicio in $servicios) {
$estado = Get-Service -Name $servicio -ErrorAction SilentlyContinue
if ($estado.Status -ne "Running") {
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
# Verificar reinicios recientes
$reiniciosRecientes = (Get-Content $logFile -ErrorAction SilentlyContinue |
Where-Object { $_ -match $servicio -and $_ -match "REINICIADO" } |
Where-Object {
$fecha = ($_ -split " \| ")[0]
(Get-Date $fecha) -gt (Get-Date).AddHours(-$periodoHoras)
}).Count
if ($reiniciosRecientes -lt $maxReinicios) {
Restart-Service -Name $servicio -Force
Add-Content $logFile "$timestamp | $servicio | REINICIADO | Intento $($reiniciosRecientes + 1)"
} else {
Add-Content $logFile "$timestamp | $servicio | LIMITE ALCANZADO | Requiere intervencion manual"
# Enviar email de alerta
Send-MailMessage -To "it@tuempresa.es" -From "monitor@tuempresa.es" `
-Subject "ALERTA: $servicio no responde tras $maxReinicios reinicios" `
-Body "El servicio $servicio en $env:COMPUTERNAME requiere intervencion manual." `
-SmtpServer "smtp.tuempresa.es"
}
}
}
Programar la ejecución automática
- Abre el Programador de tareas (taskschd.msc).
- Crea una nueva tarea con trigger “Repetir cada 1 minuto” durante un periodo indefinido.
- Acción:
powershell.exe -ExecutionPolicy Bypass -File C:\Scripts\Monitor-Services.ps1. - Ejecutar con privilegios de administrador.
Configurar la recuperación automática nativa de Windows
Windows incluye una funcionalidad de recuperación de servicios integrada, útil como primera línea de defensa:
- Abre services.msc, localiza el servicio y accede a Propiedades.
- Ve a la pestaña Recuperación.
- Configura:
- Primer error: Reiniciar el servicio.
- Segundo error: Reiniciar el servicio.
- Errores subsiguientes: Ejecutar un programa (un script que notifique al equipo de IT).
- Restablecer el contador de errores después de: 1 día.
- Reiniciar el servicio después de: 30 segundos (tiempo para que libere recursos).
Esta configuración es básica pero efectiva para servicios individuales. Para monitorización integral de toda la infraestructura, Zabbix es la solución adecuada.
Auto-remediación en Linux con systemd
En servidores Linux, systemd ofrece reinicio automático nativo. Edita el archivo del servicio (por ejemplo, /etc/systemd/system/mi-servicio.service):
[Service]
Restart=on-failure
RestartSec=30s
StartLimitIntervalSec=3600
StartLimitBurst=5
Restart=on-failure: reinicia solo si el servicio termina con error (no si se detiene manualmente).RestartSec=30s: espera 30 segundos antes de reiniciar (para evitar bucles rápidos).StartLimitBurst=5: máximo 5 reinicios en el periodo definido porStartLimitIntervalSec.
Aplica los cambios con systemctl daemon-reload.
Cómo IBERSYA configura la monitorización para sus clientes
Nuestro enfoque estándar de monitorización y auto-remediación incluye:
- Despliegue de Zabbix Server en la infraestructura del cliente o en nuestra nube privada.
- Agentes Zabbix en todos los servidores y equipos críticos.
- Catálogo de servicios monitorizados: definimos con el cliente cuáles son los servicios críticos y sus SLAs.
- Auto-remediación de nivel 1: reinicio automático de servicios con límite de 3 intentos.
- Escalado a nivel 2: si la auto-remediación falla, nuestro equipo de soporte recibe la alerta y conecta remotamente (via Rustdesk) para diagnosticar y resolver.
- Informes mensuales: entregamos un informe con la disponibilidad real de cada servicio, incidencias detectadas y tiempo medio de resolución.
Métricas clave para medir la mejora
Después de implementar monitorización y auto-remediación, mide:
| Métrica | Antes (típico) | Después (objetivo) |
|---|---|---|
| Tiempo medio de detección (MTTD) | 30-60 minutos | Menos de 1 minuto |
| Tiempo medio de resolución (MTTR) | 1-4 horas | 2-5 minutos (auto-remediación) |
| Disponibilidad de servicios críticos | 95-98 % | 99,5 %+ |
| Incidencias detectadas por usuarios | 70 % | Menos del 10 % |
Según Gartner (2024), las empresas que implementan monitorización proactiva con capacidad de auto-remediación obtienen un ROI del 250-400 % en el primer año, principalmente por la reducción del tiempo de inactividad y la liberación del equipo de IT para tareas de mayor valor.
Problemas frecuentes y solución
- El servicio no se reinicia automáticamente: verifica que el agente Zabbix tiene permisos de administrador en el servidor y que la opción “Allow remote commands” está habilitada en la configuración del agente.
- Reinicios demasiado frecuentes: indica un problema subyacente (fuga de memoria, disco lleno, error de configuración). No subas el límite de reinicios: investiga la causa raíz revisando los logs del servicio y los contadores de rendimiento del servidor.
- El trigger no se activa: comprueba que el intervalo de comprobación del item es suficientemente bajo (30-60 segundos) y que la expresión del trigger es correcta. Usa la función “Test” de Zabbix para simular el valor.
- Falsos positivos: algunos servicios tardan segundos en arrancar. Configura una histéresis en el trigger: que se active solo si el servicio lleva más de 60 segundos caído, para evitar alertas durante reinicios planificados.
Preguntas frecuentes
¿Puedo aplicar auto-remediación a aplicaciones web, no solo servicios del sistema? Sí. Crea un item de tipo web scenario en Zabbix que compruebe la URL de la aplicación (HTTP 200). Si falla, la acción puede reiniciar el servicio web (IIS, Apache, Nginx) o ejecutar un script personalizado.
¿Qué riesgo tiene configurar reinicios automáticos? El riesgo principal es enmascarar un problema grave con reinicios continuos. Por eso es fundamental establecer límites de reinicio y escalar si se superan. Además, cada reinicio automático debe quedar registrado para análisis posterior.
¿Zabbix es gratuito? Sí, Zabbix es open source y gratuito. No tiene límite de hosts, items ni usuarios. Existe una versión con soporte comercial para quien necesite soporte prioritario del fabricante.
¿Cada cuánto debo revisar la configuración de monitorización? Recomendamos una revisión trimestral: añadir nuevos servicios, ajustar umbrales de triggers, revisar los informes de disponibilidad y actualizar los contactos de escalado. Además, cualquier cambio en la infraestructura (nuevo servidor, nueva aplicación) debe reflejarse inmediatamente en Zabbix.