OpenObserve
Guía completa para configurar y usar OpenObserve en Floutic para observabilidad completa de la aplicación.
¿Qué es OpenObserve?
OpenObserve es una plataforma de observabilidad open-source que reemplaza a Elasticsearch, Logstash, Kibana, Prometheus y Grafana. En Floutic se usa para:
- Logs: Errores, eventos y logs estructurados
- Métricas: Métricas de API, negocio, infraestructura y rendimiento
- RUM (Real User Monitoring): Datos de usuarios reales desde el frontend
- Trazas: Seguimiento de requests (futuro)
Configuración Inicial
Paso 1: Verificar que OpenObserve esté corriendo
# Verificar estado
docker compose ps openobserve
# Ver logs
docker compose logs openobserve | tail -20
# Verificar salud
curl http://localhost:5080/api/default/health
Paso 2: Configurar Variables de Entorno
Backend (backend/.env):
# OpenObserve Configuration
OPENOBSERVE_URL=http://openobserve:5080 # Interno en Docker
OPENOBSERVE_USER=root@example.com
OPENOBSERVE_PASSWORD=openobserve_pass123
OPENOBSERVE_API_KEY= # Opcional, obtener desde Settings → API Keys
# Configuración de logging
LOG_TO_OPENOBSERVE=false # true para enviar todos los logs (no recomendado en producción)
Frontend (frontend/.env):
# OpenObserve RUM (Real User Monitoring)
VITE_OPENOBSERVE_CLIENT_TOKEN= # Obtener desde Settings → API Keys → RUM Token
VITE_OPENOBSERVE_URL=https://oo.haorp.es # URL pública
Paso 3: Crear los Streams
Los streams se crean automáticamente cuando se envía el primer log, pero puedes validarlos:
Opción A: Diagnóstico completo (Recomendado)
# Ejecutar diagnóstico completo desde Docker
docker compose exec backend python scripts/diagnose_openobserve.py
Este script verifica:
- ✅ Conexión con OpenObserve
- ✅ Autenticación (user/password o API key)
- ✅ Envío de logs directo
- ✅ Uso del módulo de observabilidad
- ✅ Validación de streams
Opción B: Crear desde la UI
- Accede a OpenObserve:
https://oo.haorp.es(ohttp://localhost:5080en desarrollo) - Inicia sesión con las credenciales de tu
.env - Los streams se crearán automáticamente cuando llegue el primer log
Streams Disponibles
Floutic utiliza los siguientes streams organizados por tipo:
Streams de Logs
backend-stream
Logs del backend (errores, eventos importantes).
Cuándo se envía:
- Errores no controlados (excepciones)
- Eventos importantes de negocio
- Cuando
LOG_TO_OPENOBSERVE=true(todos los logs)
Estructura:
{
"type": "python_log",
"level": "ERROR",
"logger": "app.api.endpoints.projects",
"message": "Error message",
"module": "projects",
"function": "create_project",
"line": 123,
"timestamp": "2025-01-21T10:00:00Z"
}
frontend-stream
Logs del frontend (errores JavaScript, eventos).
Cuándo se envía:
- Errores JavaScript no controlados
- Errores de red
- Eventos importantes del frontend
Estructura:
{
"type": "frontend_error",
"level": "error",
"message": "Error message",
"url": "/dashboard/empresa",
"userAgent": "Mozilla/5.0...",
"timestamp": "2025-01-21T10:00:00Z"
}
client-errors-stream
Errores HTTP 4xx del backend.
Cuándo se envía:
- Requests con status 400-499
- Validaciones fallidas
- Permisos denegados
server-errors-stream
Errores HTTP 5xx del backend.
Cuándo se envía:
- Requests con status 500-599
- Errores de servidor
- Excepciones no controladas
Streams de Métricas
api-metrics-stream
Métricas de rendimiento de la API.
Datos incluidos:
- Endpoint y método HTTP
- Status code
- Tiempo de respuesta (ms)
- User ID (si está autenticado)
- Timestamp
Estructura:
{
"type": "api_metric",
"endpoint": "/api/projects",
"method": "POST",
"status_code": 201,
"response_time_ms": 125.5,
"user_id": 123,
"timestamp": "2025-01-21T10:00:00Z"
}
business-metrics-stream
Métricas de negocio.
Métricas incluidas:
- Proyectos creados
- Usuarios registrados
- Pagos procesados
- Reseñas creadas
- Aplicaciones enviadas
Estructura:
{
"type": "business_metric",
"metric_name": "project_created",
"value": 1.0,
"metric_type": "counter",
"tags": {
"category": "automatización",
"budget_range": "500-1000"
},
"timestamp": "2025-01-21T10:00:00Z"
}
performance-stream
Métricas de rendimiento.
Métricas incluidas:
- Tiempo de respuesta de queries
- Tiempo de procesamiento
- Uso de memoria
- Tiempo de renderizado
infrastructure-stream
Métricas de infraestructura.
Métricas incluidas:
- CPU usage
- Memoria usage
- Disco usage
- Conexiones de base de datos
- Conexiones Redis
Frecuencia: Cada 5 minutos
Streams de Seguridad
security-stream
Eventos de seguridad.
Eventos incluidos:
- Intentos de login fallidos
- Rate limiting activado
- Accesos no autorizados
- Cambios de permisos
- Sesiones concurrentes excedidas
Estructura:
{
"type": "security_event",
"event_type": "rate_limit_exceeded",
"user_id": 123,
"ip_address": "192.168.1.1",
"endpoint": "/api/auth/login",
"timestamp": "2025-01-21T10:00:00Z"
}
Streams de Integraciones
integration-stream
Eventos de integraciones externas.
Eventos incluidos:
- Sincronizaciones con GoHighLevel
- Webhooks de Stripe
- Errores de integración
- Sincronizaciones exitosas
Streams de Jobs
jobs-stream
Logs de workers y jobs en background (si se implementan).
Configuración del Frontend (RUM)
Paso 1: Obtener Client Token
- Accede a OpenObserve:
https://oo.haorp.es - Ve a Settings → API Keys
- Crea o copia el RUM Token
- Añádelo a
frontend/.env:VITE_OPENOBSERVE_CLIENT_TOKEN=tu_rum_token_aqui
Paso 2: Configurar SDK
El SDK oficial de OpenObserve se configura automáticamente si VITE_OPENOBSERVE_CLIENT_TOKEN está presente.
Datos enviados automáticamente:
- Page views
- Clicks e interacciones
- Errores JavaScript
- Métricas de rendimiento (LCP, CLS, INP)
- Errores de red
Paso 3: Verificar
-
Reconstruir el frontend:
docker compose restart frontend -
Abrir la aplicación en el navegador
-
Abrir la consola (F12)
-
Verificar mensajes:
[OpenObserve SDK] ✅ SDK inicializado correctamente
[OpenObserve SDK] 📊 Datos RUM se enviarán a: https://oo.haorp.es
Uso en el Código
Backend: Enviar Logs
from app.core.observability import send_log, get_stream
# Enviar log simple
await send_log(
{
"type": "custom_event",
"message": "Evento importante",
"user_id": current_user.id
},
get_stream("backend")
)
Backend: Enviar Métricas
from app.core.metrics import send_api_metric, send_business_metric
# Métrica de API
await send_api_metric(
endpoint="/api/projects",
method="POST",
status_code=201,
response_time_ms=125.5,
user_id=current_user.id
)
# Métrica de negocio
await send_business_metric(
metric_name="project_created",
value=1.0,
metric_type="counter",
tags={"category": "automatización"}
)
Backend: Enviar Eventos de Seguridad
from app.core.observability import send_log, get_stream
await send_log(
{
"type": "security_event",
"event_type": "rate_limit_exceeded",
"user_id": user_id,
"ip_address": request.client.host,
"endpoint": str(request.url)
},
get_stream("security")
)
Frontend: Enviar Eventos Personalizados
// El SDK se inicializa automáticamente
// Para enviar eventos personalizados:
import { zo } from '@openobserve/browser-rum';
zo.addAction('custom_event', {
category: 'user_action',
name: 'button_click',
custom_data: {
button_id: 'create_project',
page: '/dashboard/empresa'
}
});
Dashboards Recomendados
Dashboard de API
Métricas principales:
- Requests por minuto
- Tiempo de respuesta promedio (p50, p95, p99)
- Distribución de status codes
- Endpoints más lentos
- Errores por endpoint
Queries útiles:
-- Requests por minuto
SELECT count(*) FROM "api-metrics-stream"
WHERE timestamp > now() - 1h
GROUP BY timestamp/1m
-- Tiempo de respuesta p95
SELECT percentile(response_time_ms, 95) FROM "api-metrics-stream"
WHERE timestamp > now() - 1h
Dashboard de Negocio
Métricas principales:
- Proyectos creados (por día/semana)
- Usuarios registrados
- Pagos procesados
- Reseñas creadas
- Tasa de conversión
Dashboard de Seguridad
Métricas principales:
- Intentos de login fallidos
- Rate limiting activado
- Accesos no autorizados
- Sesiones concurrentes
Dashboard de Infraestructura
Métricas principales:
- CPU usage
- Memoria usage
- Disco usage
- Conexiones de base de datos
- Conexiones Redis
Alertas Recomendadas
Alertas Críticas
-
Tasa de Errores de Servidor Alta
- Condición: > 5% de requests con código 5xx en últimos 5 minutos
- Acción: Notificar inmediatamente
-
Tiempo de Respuesta Muy Alto
- Condición: p95 > 2000ms en últimos 5 minutos
- Acción: Investigar endpoints lentos
-
Sistema de Logging Fallando
- Condición: Tasa de éxito < 80% en últimos 5 minutos
- Acción: Verificar conexión con OpenObserve
Alertas de Advertencia
-
Tasa de Errores de Cliente Alta
- Condición: > 10% de requests con código 4xx en últimos 10 minutos
-
Uso de Recursos Alto
- Condición: CPU > 80% o Memoria > 90% en últimos 5 minutos
-
Actividad de Seguridad Sospechosa
- Condición: > 20 intentos de login fallidos en últimos 5 minutos
Troubleshooting
No veo datos en OpenObserve
-
Verificar conexión:
docker compose exec backend python scripts/diagnose_openobserve.py -
Verificar credenciales:
grep OPENOBSERVE backend/.env -
Revisar logs del backend:
docker compose logs backend | grep -i openobserve -
Probar envío manual:
docker compose exec backend python scripts/test_openobserve.py
Los streams no aparecen
- Los streams se crean automáticamente al recibir el primer log
- Si no aparecen, verifica:
- El backend puede alcanzar OpenObserve
- Las credenciales son correctas
- No hay errores en los logs del backend
Errores de autenticación
- Verificar que
OPENOBSERVE_USERyOPENOBSERVE_PASSWORDcoincidan - Si cambiaste credenciales, recrear contenedor:
docker compose down openobserve
rm -rf docker-volumes/openobserve/data
docker compose up -d openobserve
Frontend no envía datos RUM
- Verificar que
VITE_OPENOBSERVE_CLIENT_TOKENesté configurado - Verificar que el token sea válido (RUM Token, no API Key)
- Reconstruir frontend:
docker compose restart frontend - Verificar consola del navegador para errores
Configuración Avanzada
Rate Limiting
# Limitar envío de logs (logs por segundo)
OPENOBSERVE_RATE_LIMIT=100
Batching
# Tamaño del batch
OPENOBSERVE_BATCH_SIZE=50
# Intervalo para enviar batch automáticamente (segundos)
OPENOBSERVE_BATCH_INTERVAL=5.0
Timeouts y Retries
# Timeout para requests (segundos)
OPENOBSERVE_TIMEOUT=5.0
# Número de reintentos
OPENOBSERVE_RETRIES=1
Documentación Completa
Para más detalles, consulta:
- Métricas - Documentación completa de métricas
- Dashboards - Guía de dashboards
- Alertas - Configuración de alertas
- Documentación Técnica - Documentación técnica detallada