Coroot-pg-agent – exportador de código abierto de Postgres para Prometheus
Motivación:
En Coroot, estamos trabajando en un producto capaz de detectar la causa principal de una interrupción en el servicio y ofrecer a nuestros usuarios una lista de posibles soluciones.
Inicialmente, pensábamos utilizar las métricas recogidas por los exportadores de Prometheus de código abierto existentes, como postgres_exporter (1,7k estrellas en Github). Lamentablemente, nos dimos cuenta de que las métricas que recoge son inútiles para identificar los problemas de rendimiento más comunes, como:
- Una consulta que consume mucha CPU está afectando a otras consultas
- Un servidor ha alcanzado su límite de max_connections porque la mayoría de las conexiones se encuentran estancadas en el estado idle in transaction
- Una consulta que hace uso intensivo de la E/S está afectando a otras consultas
- Una consulta está obstaculizando otras consultas al mantener un bloqueo exclusivo
Puesto que los cambios propuestos para postgres_exporter resultarían muy extensos, decidimos crear otro exportador.
Características:
Métricas de consulta exhaustivas
El agente agrupa las estadísticas de pg_stat_statements y pg_stat_activity teniendo en cuenta no sólo las consultas finalizadas sino también las que están todavía en ejecución.
Monitoreo de bloqueos
No es suficiente recopilar el número de bloqueos activos de pg_locks. Lo que los DBAs realmente necesitan saber es qué consulta está bloqueando a las demás. Gracias a las métricas recopiladas es posible saberlo.
Normalización y ocultamiento de consultas
Además de la normalización de las consultas, que Postgres realiza, el agente oculta todas las consultas impidiendo que se introduzcan datos sensibles en las etiquetas de las métricas.