Configuración de Alertas - OpenObserve Floutic
Esta guía explica cómo configurar alertas en OpenObserve para monitorear la salud de la aplicación Floutic.
Índice
- Introducción
- Alertas Recomendadas
- Configuración de Alertas en OpenObserve
- Notificaciones
- Ejemplos de Reglas de Alerta
- Mejores Prácticas
Introducción
Las alertas en OpenObserve permiten notificar automáticamente cuando se detectan problemas o condiciones anómalas en la aplicación. Esto ayuda a detectar y resolver problemas antes de que afecten a los usuarios.
Tipos de Alertas
- Alertas de Errores: Detectan errores HTTP (4xx, 5xx) o excepciones
- Alertas de Rendimiento: Detectan tiempos de respuesta altos o degradación del servicio
- Alertas de Infraestructura: Detectan problemas de recursos (CPU, memoria, disco, conexiones)
- Alertas de Negocio: Detectan anomalías en métricas de negocio
- Alertas de Seguridad: Detectan intentos de acceso no autorizado o actividad sospechosa
Alertas Recomendadas
🔴 Críticas (Activar Inmediatamente)
-
Tasa de Errores de Servidor Alta
- Condición: > 5% de requests con código 5xx en los últimos 5 minutos
- Severidad: Crítica
- Acción: Notificar inmediatamente al equipo de desarrollo
-
Tiempo de Respuesta Muy Alto
- Condición: p95 > 2000ms en los últimos 5 minutos
- Severidad: Crítica
- Acción: Investigar endpoints lentos
-
Sistema de Logging Fallando
- Condición: Tasa de éxito < 80% en los últimos 5 minutos
- Severidad: Crítica
- Acción: Verificar conexión con OpenObserve
-
Uso de Memoria Crítico
- Condición: Uso de memoria > 90% en los últimos 5 minutos
- Severidad: Crítica
- Acción: Escalar recursos o investigar memory leaks
-
Conexiones PostgreSQL Agotadas
- Condición: Uso de conexiones > 80% en los últimos 5 minutos
- Severidad: Crítica
- Acción: Aumentar pool de conexiones o investigar conexiones colgadas
🟡 Advertencias (Monitorear Regularmente)
-
Tasa de Errores de Cliente Alta
- Condición: > 10% de requests con código 4xx en los últimos 10 minutos
- Severidad: Advertencia
- Acción: Revisar logs de errores de cliente
-
Hit Rate de Redis Bajo
- Condición: Hit rate < 80% en los últimos 15 minutos
- Severidad: Advertencia
- Acción: Revisar estrategia de caché
-
Uso de CPU Alto
- Condición: Uso de CPU > 80% en los últimos 10 minutos
- Severidad: Advertencia
- Acción: Investigar procesos que consumen CPU
-
Disco Llenándose
- Condición: Uso de disco > 85% en los últimos 30 minutos
- Severidad: Advertencia
- Acción: Limpiar logs antiguos o aumentar espacio
-
Tiempo de Respuesta Degradado
- Condición: p95 > 1000ms en los últimos 10 minutos
- Severidad: Advertencia
- Acción: Monitorear y optimizar si persiste
🟢 Informativas (Monitorear Tendencias)
-
Aumento de Tráfico
- Condición: Requests/segundo > 150% del promedio de la última hora
- Severidad: Informativa
- Acción: Monitorear para detectar picos de tráfico
-
Errores JavaScript Frecuentes
- Condición: > 10 errores JavaScript únicos en los últimos 30 minutos
- Severidad: Informativa
- Acción: Revisar errores más comunes
-
Intentos de Acceso No Autorizado
- Condición: > 20 intentos en los últimos 10 minutos desde la misma IP
- Severidad: Informativa
- Acción: Considerar bloquear IP si es sospechosa
Configuración de Alertas en OpenObserve
Paso 1: Acceder a Alertas
- Iniciar sesión en OpenObserve
- Ir a Alerts en el menú lateral
- Clic en Create Alert
Paso 2: Configurar la Alerta
Configuración Básica
- Name: Nombre descriptivo de la alerta
- Description: Descripción de qué detecta la alerta
- Stream: Stream donde buscar (ej:
api-metrics-stream,server-errors-stream) - Query: Query SQL para detectar la condición
Configuración de Condición
- Condition: Condición que debe cumplirse (ej:
COUNT(*) > 10) - Time Range: Ventana de tiempo para evaluar (ej: últimos 5 minutos)
- Evaluation Interval: Cada cuánto evaluar la alerta (ej: cada 1 minuto)
Configuración de Notificaciones
- Notification Channels: Canales de notificación (email, Slack, webhook, etc.)
- Severity: Severidad de la alerta (Critical, Warning, Info)
Paso 3: Guardar y Activar
- Revisar la configuración
- Clic en Save
- Activar la alerta
Notificaciones
Canales de Notificación Disponibles
- Email: Enviar alertas por correo electrónico
- Slack: Enviar alertas a un canal de Slack
- Webhook: Enviar alertas a un webhook personalizado
- PagerDuty: Integración con PagerDuty
- Opsgenie: Integración con Opsgenie
Configurar Canal de Email
- Ir a Settings > Notification Channels
- Clic en Add Channel
- Seleccionar Email
- Configurar:
- Name: Nombre del canal
- Email Addresses: Direcciones de correo (separadas por comas)
- Subject: Asunto del correo
- Guardar
Configurar Canal de Slack
- Crear un webhook en Slack:
- Ir a Slack Apps > Incoming Webhooks
- Crear un nuevo webhook
- Copiar la URL del webhook
- En OpenObserve:
- Ir a Settings > Notification Channels
- Clic en Add Channel
- Seleccionar Slack
- Pegar la URL del webhook
- Configurar el canal de Slack
- Guardar
Ejemplos de Reglas de Alerta
Ejemplo 1: Tasa de Errores de Servidor Alta
-- Query para la alerta
SELECT COUNT(*) as error_count
FROM server-errors-stream
WHERE timestamp > NOW() - INTERVAL 5 MINUTE;
-- Condición
error_count > (SELECT COUNT(*) * 0.05 FROM api-metrics-stream WHERE timestamp > NOW() - INTERVAL 5 MINUTE)
Configuración:
- Name:
High Server Error Rate - Stream:
server-errors-stream - Query: Ver arriba
- Condition:
error_count > threshold - Time Range: Últimos 5 minutos
- Evaluation Interval: Cada 1 minuto
- Severity: Critical
Ejemplo 2: Tiempo de Respuesta Muy Alto
-- Query para la alerta
SELECT PERCENTILE(response_time_ms, 95) as p95
FROM api-metrics-stream
WHERE timestamp > NOW() - INTERVAL 5 MINUTE;
Configuración:
- Name:
High Response Time (p95) - Stream:
api-metrics-stream - Query: Ver arriba
- Condition:
p95 > 2000 - Time Range: Últimos 5 minutos
- Evaluation Interval: Cada 1 minuto
- Severity: Critical
Ejemplo 3: Uso de Memoria Crítico
-- Query para la alerta
SELECT memory.percent
FROM infrastructure-stream
WHERE service = 'system'
AND timestamp > NOW() - INTERVAL 5 MINUTE
ORDER BY timestamp DESC
LIMIT 1;
Configuración:
- Name:
Critical Memory Usage - Stream:
infrastructure-stream - Query: Ver arriba
- Condition:
memory.percent > 90 - Time Range: Últimos 5 minutos
- Evaluation Interval: Cada 1 minuto
- Severity: Critical
Ejemplo 4: Conexiones PostgreSQL Agotadas
-- Query para la alerta
SELECT connections.usage_percent
FROM infrastructure-stream
WHERE service = 'postgres'
AND timestamp > NOW() - INTERVAL 5 MINUTE
ORDER BY timestamp DESC
LIMIT 1;
Configuración:
- Name:
PostgreSQL Connections Exhausted - Stream:
infrastructure-stream - Query: Ver arriba
- Condition:
connections.usage_percent > 80 - Time Range: Últimos 5 minutos
- Evaluation Interval: Cada 1 minuto
- Severity: Critical
Ejemplo 5: Hit Rate de Redis Bajo
-- Query para la alerta
SELECT cache_stats.hit_rate_percent
FROM infrastructure-stream
WHERE service = 'redis'
AND timestamp > NOW() - INTERVAL 15 MINUTE
ORDER BY timestamp DESC
LIMIT 1;
Configuración:
- Name:
Low Redis Hit Rate - Stream:
infrastructure-stream - Query: Ver arriba
- Condition:
cache_stats.hit_rate_percent < 80 - Time Range: Últimos 15 minutos
- Evaluation Interval: Cada 5 minutos
- Severity: Warning
Ejemplo 6: Sistema de Logging Fallando
-- Query para la alerta
SELECT success_rate
FROM logging-system-metrics
WHERE timestamp > NOW() - INTERVAL 5 MINUTE
ORDER BY timestamp DESC
LIMIT 1;
Configuración:
- Name:
Logging System Failure - Stream:
logging-system-metrics - Query: Ver arriba
- Condition:
success_rate < 0.8 - Time Range: Últimos 5 minutos
- Evaluation Interval: Cada 1 minuto
- Severity: Critical
Ejemplo 7: Errores JavaScript Frecuentes
-- Query para la alerta
SELECT COUNT(DISTINCT message) as unique_errors
FROM frontend-stream
WHERE type = 'javascript_error'
AND timestamp > NOW() - INTERVAL 30 MINUTE;
Configuración:
- Name:
Frequent JavaScript Errors - Stream:
frontend-stream - Query: Ver arriba
- Condition:
unique_errors > 10 - Time Range: Últimos 30 minutos
- Evaluation Interval: Cada 5 minutos
- Severity: Warning
Ejemplo 8: Intentos de Acceso No Autorizado
-- Query para la alerta
SELECT ip_address, COUNT(*) as attempt_count
FROM security-stream
WHERE operation_type = 'unauthorized_access'
AND timestamp > NOW() - INTERVAL 10 MINUTE
GROUP BY ip_address
HAVING attempt_count > 20;
Configuración:
- Name:
Suspicious Unauthorized Access Attempts - Stream:
security-stream - Query: Ver arriba
- Condition:
attempt_count > 20 - Time Range: Últimos 10 minutos
- Evaluation Interval: Cada 2 minutos
- Severity: Warning
Mejores Prácticas
1. Evitar Alertas Ruidosas
- Problema: Alertas que se disparan constantemente sin ser críticas
- Solución: Ajustar umbrales y ventanas de tiempo para reducir falsos positivos
2. Usar Ventanas de Tiempo Apropiadas
- Errores críticos: Ventanas cortas (1-5 minutos)
- Tendencias: Ventanas más largas (15-30 minutos)
- Métricas de infraestructura: Ventanas intermedias (5-15 minutos)
3. Agrupar Alertas Relacionadas
- Agrupar alertas similares para evitar notificaciones duplicadas
- Usar tags o etiquetas para categorizar alertas
4. Documentar Alertas
- Documentar qué detecta cada alerta
- Explicar cómo investigar y resolver el problema
- Incluir enlaces a runbooks o documentación
5. Revisar y Ajustar Regularmente
- Revisar alertas semanalmente
- Ajustar umbrales según el comportamiento real
- Eliminar alertas que no son útiles
6. Configurar Escalado
- Configurar escalado de alertas (ej: si no se resuelve en X minutos, notificar a más personas)
- Usar diferentes canales para diferentes severidades
7. Probar Alertas
- Probar alertas después de configurarlas
- Verificar que las notificaciones lleguen correctamente
- Ajustar formato de mensajes para que sean útiles
8. Monitorear el Sistema de Alertas
- Monitorear que las alertas se evalúen correctamente
- Verificar que no haya alertas que fallen silenciosamente