Saltar al contenido principal

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

  1. Introducción
  2. Alertas Recomendadas
  3. Configuración de Alertas en OpenObserve
  4. Notificaciones
  5. Ejemplos de Reglas de Alerta
  6. 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

  1. Alertas de Errores: Detectan errores HTTP (4xx, 5xx) o excepciones
  2. Alertas de Rendimiento: Detectan tiempos de respuesta altos o degradación del servicio
  3. Alertas de Infraestructura: Detectan problemas de recursos (CPU, memoria, disco, conexiones)
  4. Alertas de Negocio: Detectan anomalías en métricas de negocio
  5. Alertas de Seguridad: Detectan intentos de acceso no autorizado o actividad sospechosa

Alertas Recomendadas

🔴 Críticas (Activar Inmediatamente)

  1. 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
  2. Tiempo de Respuesta Muy Alto

    • Condición: p95 > 2000ms en los últimos 5 minutos
    • Severidad: Crítica
    • Acción: Investigar endpoints lentos
  3. 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
  4. 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
  5. 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)

  1. 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
  2. Hit Rate de Redis Bajo

    • Condición: Hit rate < 80% en los últimos 15 minutos
    • Severidad: Advertencia
    • Acción: Revisar estrategia de caché
  3. Uso de CPU Alto

    • Condición: Uso de CPU > 80% en los últimos 10 minutos
    • Severidad: Advertencia
    • Acción: Investigar procesos que consumen CPU
  4. Disco Llenándose

    • Condición: Uso de disco > 85% en los últimos 30 minutos
    • Severidad: Advertencia
    • Acción: Limpiar logs antiguos o aumentar espacio
  5. 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)

  1. 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
  2. Errores JavaScript Frecuentes

    • Condición: > 10 errores JavaScript únicos en los últimos 30 minutos
    • Severidad: Informativa
    • Acción: Revisar errores más comunes
  3. 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

  1. Iniciar sesión en OpenObserve
  2. Ir a Alerts en el menú lateral
  3. 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

  1. Revisar la configuración
  2. Clic en Save
  3. Activar la alerta

Notificaciones

Canales de Notificación Disponibles

  1. Email: Enviar alertas por correo electrónico
  2. Slack: Enviar alertas a un canal de Slack
  3. Webhook: Enviar alertas a un webhook personalizado
  4. PagerDuty: Integración con PagerDuty
  5. Opsgenie: Integración con Opsgenie

Configurar Canal de Email

  1. Ir a Settings > Notification Channels
  2. Clic en Add Channel
  3. Seleccionar Email
  4. Configurar:
    • Name: Nombre del canal
    • Email Addresses: Direcciones de correo (separadas por comas)
    • Subject: Asunto del correo
  5. Guardar

Configurar Canal de Slack

  1. Crear un webhook en Slack:
    • Ir a Slack Apps > Incoming Webhooks
    • Crear un nuevo webhook
    • Copiar la URL del webhook
  2. En OpenObserve:
    • Ir a Settings > Notification Channels
    • Clic en Add Channel
    • Seleccionar Slack
    • Pegar la URL del webhook
    • Configurar el canal de Slack
  3. 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

Referencias