Ir al contenido

Monitorización: logs, Grafana y alertas en un stack Odoo

Promtail, Loki, métricas y umbrales de WARNING que sí importan
7 de julio de 2026 por
Monitorización: logs, Grafana y alertas en un stack Odoo
Atemi, Aitor Atencia

Odoo · DevOps · Observabilidad

Un stack Odoo sin monitorización funciona bien... hasta que deja de hacerlo, y para entonces el problema lleva horas o días acumulándose silenciosamente en los logs. Montar Promtail + Loki + Grafana sobre los logs existentes es más rápido de lo que parece.

Logo Odoo Logo Grafana
Los logs de Odoo ya dicen casi todo lo que necesitas saber; solo hace falta mirarlos a tiempo.

El punto de partida

Logs estructurados, no texto suelto

Antes de pensar en dashboards, hay que asegurarse de que Odoo está generando logs útiles. El nivel de log por defecto (info) es razonable en producción; debug genera demasiado ruido y complica encontrar el problema real.

# odoo.conf
[options]
log_level = info
log_handler = :INFO,werkzeug:WARNING,odoo.sql_db:WARNING
logfile = /var/log/odoo/odoo.log

Recolección

Promtail + Loki: enviar logs sin montar un ELK completo

Loki indexa solo las etiquetas (no el contenido completo de cada línea como Elasticsearch), lo que lo hace mucho más ligero para un stack Odoo de tamaño mediano. Promtail se encarga de leer el fichero de log y enviarlo a Loki con las etiquetas adecuadas.

# promtail-config.yaml
scrape_configs:
  - job_name: odoo
    static_configs:
      - targets: [localhost]
        labels:
          job: odoo
          env: production
          __path__: /var/log/odoo/odoo.log
# docker-compose.yml (extracto)
services:
  loki:
    image: grafana/loki:3.0.0
    ports: ["3100:3100"]
  promtail:
    image: grafana/promtail:3.0.0
    volumes:
      - /var/log/odoo:/var/log/odoo:ro
      - ./promtail-config.yaml:/etc/promtail/config.yaml
  grafana:
    image: grafana/grafana:11.0.0
    ports: ["3000:3000"]

Qué mirar primero

Métricas y umbrales que de verdad importan

SeñalUmbral orientativoPor qué importa
Líneas WARNING/minPico > 3x la media horariaSuele preceder a un ERROR en cascada
Líneas CRITICALCualquieraAlerta inmediata, casi siempre afecta a usuarios
Tiempo de respuesta de queries lentas> 1s en el log de odoo.sql_dbIndicador temprano de N+1 o falta de índices
Workers ocupados vs disponibles> 90% sostenidoSeñal de que faltan workers o hay peticiones colgadas

Cerrando el círculo

Dashboards y alertas en Grafana

Con Loki como fuente de datos, un dashboard mínimo pero útil combina: un panel de conteo de líneas por nivel (INFO/WARNING/ERROR) agrupado en el tiempo, y un panel de tabla con las últimas líneas ERROR o CRITICAL filtrables por texto.

# Query LogQL de ejemplo: contar WARNING por minuto
sum(count_over_time({job="odoo"} |= "WARNING" [1m]))

# Query LogQL para alertar en errores críticos
count_over_time({job="odoo"} |= "CRITICAL" [5m]) > 0
  • Alerta de Grafana sobre la query de CRITICAL: notificación inmediata a Slack o email.
  • Alerta sobre el pico de WARNING: notificación de menor prioridad, revisión al inicio del siguiente turno.
  • Panel aparte con métricas de PostgreSQL (conexiones activas, locks) si el módulo postgres_exporter está disponible.

Resumen

No hace falta un stack de observabilidad enterprise para dormir tranquilo con Odoo en producción: con logs bien configurados, Promtail+Loki para centralizarlos y un par de alertas bien calibradas en Grafana sobre CRITICAL y picos de WARNING, la mayoría de incidentes se detectan antes de que los reporte un usuario.

en Odoo
Actualizar módulos en producción sin downtime
Backups, staging, -u vs reinstalar y plan de rollback