🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Monitoreo y observabilidad en bases de datos con Prometheus y Grafana

Actualizado el 17 de marzo de 2026

¡Excelente! Aquí tienes el artículo completo, diseñado para ser escaneable, técnicamente riguroso y optimizado para SEO. Sigue las reglas de formato al pie de la letra.


El monitoreo bases de datos ha evolucionado de una simple comprobación de "up/down" a una disciplina compleja conocida como observabilidad. En entornos modernos, donde los datos son el núcleo del negocio, no basta con saber si un motor de base de datos está vivo; necesitamos entender su comportamiento interno, predecir fallos y optimizar el rendimiento en tiempo real.

Aquí es donde entran Prometheus (recolección y almacenamiento de métricas) y Grafana (visualización y alertas). Juntos, forman el stack de facto para lograr una observabilidad profunda en sistemas como PostgreSQL, MySQL, MongoDB o Redis.

¿Por qué Prometheus para Bases de Datos?

Prometheus no es un sistema de logging tradicional. Está diseñado para recopilar métricas de series temporales (time-series) mediante un modelo pull. Esto significa que Prometheus "raspa" (scrapea) periódicamente los endpoints de métricas que exponen los servicios.

Para bases de datos, esto se traduce en:

  • Bajo overhead: Un exporter dedicado (como postgres_exporter o mysqld_exporter) corre como un proceso ligero, evitando sobrecargar el motor de BD.
  • Alta dimensionalidad: Cada métrica puede tener múltiples etiquetas (labels) como database, host, query_type. Esto permite consultas extremadamente granulares.
  • Alertas integradas: Con el Alertmanager de Prometheus, podemos definir reglas basadas en umbrales (ej: conexiones > 90%) y disparar notificaciones a Slack, PagerDuty o email.

[INFO] Prometheus almacena datos en disco local. Para alta disponibilidad, se recomienda usar Thanos o Cortex como capa de almacenamiento distribuido, especialmente si monitorizas cientos de instancias.

Componentes Clave del Stack

Para lograr observabilidad real, necesitas cuatro piezas funcionando en armonía:

1. Exporters: La Puerta de Enlace

Los exporters traducen métricas internas de la base de datos a un formato que Prometheus entienda (generalmente /metrics en texto plano).

  • PostgreSQL: postgres_exporter (oficial de Prometheus). Expone: conexiones activas, tamaño de bases de datos, transacciones por segundo, bloqueos.
  • MySQL/MariaDB: mysqld_exporter. Expone: estado de replicación, consultas lentas, uso de buffers.
  • MongoDB: mongodb_exporter (de Percona o comunitario). Expone: operaciones por segundo, tamaño de colecciones, uso de conexiones.
  • Redis: redis_exporter. Expone: memoria usada, keyspace hits/misses, latencia.

2. Prometheus Server: El Cerebro

Almacena las métricas scrapeadas y permite consultarlas mediante PromQL (Prometheus Query Language). Aquí defines las reglas de alerta.

3. Grafana: El Panel de Control

Grafana se conecta a Prometheus como fuente de datos y permite construir dashboards dinámicos. Es la capa visual donde los equipos de operaciones y desarrolladores interpretan los datos.

4. Alertmanager: El Sistema de Notificación

Recibe las alertas desde Prometheus y las gestiona: silencia, agrupa, enruta a diferentes canales (Slack, OpsGenie, correo).

Configuración Práctica: Monitoreo de PostgreSQL

Vamos a ver un ejemplo concreto. Supongamos que tienes un servidor PostgreSQL en producción.

Paso 1: Instalar y configurar el Exporter

Descarga el binario o usa el contenedor Docker oficial.

docker run -d \
  --name postgres_exporter \
  --net host \
  -e DATA_SOURCE_NAME="postgresql://monitor:password@localhost:5432/postgres?sslmode=disable" \
  -p 9187:9187 \
  prometheuscommunity/postgres-exporter

Esto expondrá las métricas en http://localhost:9187/metrics.

Paso 2: Configurar Prometheus para Scrape

Añade un job en tu archivo prometheus.yml:

scrape_configs:
  - job_name: 'postgresql'
    static_configs:
      - targets: ['localhost:9187']
    metrics_path: '/metrics'
    scrape_interval: 15s

Reinicia Prometheus. En segundos, las métricas empezarán a fluir.

Paso 3: Construir un Dashboard en Grafana

  1. Añade Prometheus como fuente de datos en Grafana (URL: http://localhost:9090).
  2. Importa un dashboard predefinido (ID 9628 para PostgreSQL) o crea uno nuevo.

Una consulta PromQL típica para ver conexiones activas sería:

avg by (datname) (pg_stat_activity_count{datname!~"template.*|postgres"})

Paso 4: Definir Alertas Inteligentes

En Prometheus, añade una regla en rules.yml:

groups:
  - name: postgresql_alerts
    rules:
      - alert: HighConnectionsUsage
        expr: (pg_stat_activity_count / pg_settings_max_connections) * 100 > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Alto uso de conexiones en {{ $labels.instance }}"
          description: "Uso de conexiones > 80% durante 5 minutos."

[WARNING] No alertes sobre todo. El ruido mata la efectividad. Prioriza métricas que indiquen degradación real: latencia alta (p99), bloqueos prolongados, caché hit ratio bajo.

Métricas Esenciales para la Observabilidad

No todas las métricas son igual de útiles. Para una verdadera observabilidad, enfócate en las siguientes categorías:

Rendimiento (Throughput)

  • Consultas por segundo: Mide la carga.
  • Transacciones por segundo: Vital en sistemas OLTP.
  • Replicación lag: En entornos replicados, el retraso puede causar lecturas obsoletas.

Capacidad (Capacity)

  • Conexiones activas vs límite: El cuello de botella más común.
  • Uso de memoria: Buffers de InnoDB/PostgreSQL shared buffers.
  • Tamaño de bases de datos y tablas: Crecimiento inesperado.

Salud (Health)

  • Errores de consulta: Queries que fallan.
  • Deadlocks: Indican problemas de concurrencia.
  • Cache hit ratio: Bajo ratio = escaneos de disco excesivos.

Estrategias Avanzadas de Observabilidad

1. Cardinalidad de Métricas

Prometheus es sensible a la cardinalidad (número de combinaciones únicas de labels). Si etiquetas cada consulta SQL con un ID único, explotará la memoria. Solución: usa buckets de histogramas para latencia (le="0.1", le="0.5") en lugar de etiquetas únicas.

2. Dashboards por Capas

  • Capa de Infra: CPU, RAM, IO de disco del servidor.
  • Capa de Motor: Conexiones, transacciones, bloqueos.
  • Capa de Aplicación: Consultas lentas, errores por endpoint.

Grafana permite paneles anidados con variables de plantilla ($database, $host), facilitando la navegación.

3. Alertas Basadas en SLOs

No alertes por valores absolutos. Define Service Level Objectives (SLOs). Ejemplo:

  • Objetivo: El 99% de las consultas deben completarse en menos de 200ms.
  • Métrica: histogram_quantile(0.99, rate(pg_stat_activity_query_duration_seconds_bucket[5m]))
  • Alerta: Si el p99 supera 200ms durante 10 minutos.

4. Logs vs Métricas

La observabilidad completa combina métricas (Prometheus) con logs (Loki, Elasticsearch) y trazas (Jaeger). Para bases de datos:

  • Métricas: Tendencia y alertas.
  • Logs: Consultas lentas detalladas, errores de conexión.
  • Trazas: Correlacionar una consulta lenta con el microservicio que la originó.

[TIP] Integra Grafana con Loki para pasar de una métrica de alerta (ej: alta latencia) al log de la consulta específica en un solo clic.

Caso de Uso: Detección de Consultas Lentas en MySQL

Imagina que tu aplicación web empieza a degradarse. Con Prometheus y Grafana puedes:

  1. Identificar el síntoma: Panel de latencia p99 en MySQL muestra un pico a 5 segundos.
  2. Profundizar: El dashboard de mysqld_exporter muestra que el número de consultas lentas (slow_queries_total) se disparó.
  3. Correlacionar: Usando una variable de plantilla en Grafana, filtras por base de datos ecommerce_db.
  4. Alertar: Configuras una alerta que se active si rate(mysql_global_status_slow_queries[5m]) > 10.
  5. Actuar: El equipo de DBA captura el log de consultas lentas y optimiza el índice faltante.

Este flujo, de minutos a segundos, es el poder de la observabilidad.

Mejores Prácticas de Seguridad

  • Nunca expongas el exporter directamente a Internet. Usa un proxy inverso o autenticación básica.
  • Crea un usuario de base de datos dedicado con permisos mínimos (pg_monitor en PostgreSQL, PROCESS + REPLICATION CLIENT en MySQL).
  • Usa HTTPS entre Prometheus y los exporters si atraviesan redes no confiables.
  • Limita el scrape_interval a 15-30s para evitar sobrecargar el exporter.

Conclusión: De Monitoreo a Observabilidad

El monitoreo bases de datos tradicional te dice qué está fallando. La observabilidad con Prometheus y Grafana te permite entender por qué. Al integrar métricas de rendimiento, capacidad y salud en un solo panel, transformas datos crudos en decisiones accionables.

Ya sea que gestiones 5 o 500 bases de datos, este stack te ofrece escalabilidad, flexibilidad y un costo operativo bajo. Empieza con un exporter, construye un dashboard básico y define una alerta crítica. En pocas horas, tendrás visibilidad total de tu capa de datos.

Próximo paso: Explora el exporter de tu base de datos favorita, instálalo en un entorno de pruebas y crea tu primer dashboard. La observabilidad no es un lujo, es una necesidad en la era de los datos.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel