Las bases de datos son el corazón de las aplicaciones y sus fallos pueden tener graves consecuencias. Las herramientas de monitorización tradicionales suelen pasar por alto problemas internos del DBMS. Prometheus es un sistema que recopila y analiza métricas en tiempo real, lo que ayuda a los SRE a prevenir y diagnosticar problemas. Esta guía le mostrará cómo configurar la monitorización para PostgreSQL además MySQL con Prometeo.
Prometeo: un solucionador de problemas en el mundo de las bases de datos
No sólo monitoreo, sino un detective en tiempo real:
Prometheus es un sistema de código abierto diseñado para diagnosticar sistemas distribuidos complejos. Su filosofía: «Cada métrica es una pista. Cada gráfico cuenta la historia de un problema».
Cómo trabaja el detective:
- Modelo de tracción:
- Prometheus recopila activamente métricas de los sistemas monitoreados.
- Multidimensionalidad:
- Cada métrica tiene etiquetas (base de datos, tabla, usuario).
- PromQL:
- Un lenguaje de consulta para investigar relaciones entre eventos.
- Almacenamiento de series temporales:
- Todos los datos se almacenan para el análisis post mortem.
- Analogía del mundo real:
- Si Zabbix es un radar policial (que rastrea la velocidad), Prometheus es vigilancia satelital, que muestra *por qué* el conductor aceleró, hacia dónde se dirigía y qué riesgos le aguardaban.
¿Por qué Prometeo? Las crudas verdades
Ventajas:
- Diagnóstico de nivel experto:
- Ve dentro del DBMS como un cirujano ve los órganos.
- Investigación de causa raíz:
- Vincula fallas de la base de datos con acciones de la aplicación.
- Paz mental:
- Alertas automáticas de problemas *antes* de que se vuelvan catastróficos.
- Ecosistema de código abierto:
- Grafana para visualización, Alertmanager para notificaciones.
Desventajas:
- Curva de aprendizaje:
- Requiere un conocimiento profundo de los aspectos internos del DBMS.
- El uso de recursos:
- El almacenamiento métrico crece como una bola de nieve.
- Sin almacenamiento a largo plazo:
- De forma predeterminada, conserva los datos solo durante 15 días.
Hecho duro:
- El 68% de las empresas que utilizan Prometheus para la monitorización de bases de datos descubrieron problemas ocultos que desconocían desde hacía años.
Características únicas: por qué es un cambio radical
1. Métricas asesinas:
- Tiempo de ejecución de la transacción con desgloses de percentiles 95 y 99.
- Eficiencia del caché de búfer, no como un porcentaje, sino como una predicción del tiempo hasta el colapso.
2. Investigación de relaciones:
// Find users whose queries cause locks
pg_blocked_processes
* on (instance) group_left (usename)
pg_stat_activity{state="active"}
3. Análisis predictivo:
// Predict when tablespace will run out
predict_linear(pg_tablespace_size[24h], 86400 * 30)
Implementar Prometheus: no es una batalla, solo 5 minutos de trabajo
Paso 1: Instalar a través de Helm (Kubernetes):
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack
Paso 2: Configuración para servidores físicos (docker-compose):
version: '3'
services:
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
Paso 3 – Configurar `prometheus.yml` (fragmento):
scrape_configs:
- job_name: 'postgres'
static_configs:
- targets: ['postgres-host:9187']
- job_name: 'mysql'
static_configs:
- targets: ['mysql-host:9104']
Configuración de la recopilación de métricas: herramientas para obtener información detallada
Para PostgreSQL:
Instalar postgres_exporter:
docker run -d --name postgres_exporter \
-e DATA_SOURCE_NAME="postgresql://user:pass@host:5432/?sslmode=disable" \
quay.io/prometheuscommunity/postgres-exporter
Métricas clave en PromQL:
// Deadlocks
pg_deadlocks_total
// Cache efficiency
pg_stat_database_blks_hit / (pg_stat_database_blks_read + pg_stat_database_blks_hit)
Para MySQL:
Implementar mysqld_exporter:
docker run -d --name mysql_exporter \
-e DATA_SOURCE_NAME="user:pass@(host:3306)/" \
prom/mysqld-exporter
Métricas detalladas:
// Replication queue
mysql_slave_status_seconds_behind_master
// Temporary table issues
mysql_global_status_created_tmp_tables
Métricas para SRE: No solo números, sino señales de socorro
PostgreSQL¿Qué vuelve locos a los administradores?
Asesino Silencioso: pg_stat_actividad_en_espera
Qué significa:Número de consultas "atascadas".
Umbral de alerta: > 5 durante más de 2 minutos.
Bomba de tiempo: bloqueos de la base de datos pg_stat
Cómo analizar:
rate(pg_stat_database_deadlocks[5m]) > 0.1Colapso inminente: relación de uso de caché de búfer pg
Valor crítico: 0.95 (requiere atención inmediata) RAM expansión).
MySQL:Señales de un ataque cardíaco en la base de datos
Síntoma fatal: segundos de retraso del esclavo mysql
Por qué da miedo:
- Retraso de réplica > 30 segundos = riesgo de pérdida de datos.
Amenaza oculta: tiempo promedio de bloqueo de fila de mysql_innodb
Diagnóstico:
mysql_innodb_row_lock_time_avg > 500- Precursor de fallo: subprocesos mysql en ejecución
Acción de emergencia:
- Si es > 100, detenga inmediatamente las consultas de ejecución prolongada.
Asesinos universales del rendimiento:
// Transaction cannibals
rate(pg_stat_database_xact_commit[1m]) / rate(pg_stat_database_xact_rollback[1m]) < 10 // Disk apocalypse rate(node_disk_io_time_seconds_total[1m]) > 0.8
La vida después de la implementación: cómo cambia tu realidad
Antes de Prometeo:
- La base de datos está lenta otra vez. Reiniciemos y recemos.
Después de Prometeo:
- "La consulta del usuario `id=1347` en la tabla `orders` está bloqueando 5 transacciones.
Causa: Unión de bucle anidado sin índice. Solución: Optimice la consulta o agregue un índice.
Estadísticas del mundo real:
Equipos que utilizan Prometheus para la monitorización de DBMS:
- Reducción del tiempo de diagnóstico en un 83%.
- Se redujeron los incidentes P1/P0 en un 40%.
- Se redujo la carga de trabajo del DBA en un 65%.
Prometheus no solo muestra métricas. Te convierte en un visionario que:
- Ve lo invisible:
- Cómo la larga consulta de un usuario podría hacer colapsar el sistema para miles de personas.
- Predice el futuro:
- Cuando el espacio en disco se acabe en tres semanas.
- Entiende el pasado:
- ¿Por qué el rendimiento cayó ayer a las 14:23?