Overview
The application uses TypeORM with a PostgreSQL connection pool, but pool utilization metrics (active connections, idle connections, waiting queries) are not exposed to Prometheus. A pool saturation event (all connections in use) is invisible until it causes request timeouts.
Specifications
Features:
- Export pool metrics:
db_pool_active_connections, db_pool_idle_connections, db_pool_waiting_requests, db_pool_max_connections.
Tasks:
- Use TypeORM's
DataSource.driver.pool to read pool stats (pg-pool exposes these).
- Create a
DbPoolMetricsCollector that polls pool stats every 15 seconds.
- Register the Prometheus gauges in
MetricsModule.
- Add a Prometheus alert rule for pool utilization > 80%.
Impacted Files:
src/monitoring/metrics/
- New
src/monitoring/collectors/db-pool-metrics.collector.ts
Acceptance Criteria
- Pool metrics appear on the Prometheus scrape endpoint.
- Alert fires when active connections exceed 80% of the pool max.
- Metrics remain accurate under concurrent load (load test verified).
Overview
The application uses TypeORM with a PostgreSQL connection pool, but pool utilization metrics (active connections, idle connections, waiting queries) are not exposed to Prometheus. A pool saturation event (all connections in use) is invisible until it causes request timeouts.
Specifications
Features:
db_pool_active_connections,db_pool_idle_connections,db_pool_waiting_requests,db_pool_max_connections.Tasks:
DataSource.driver.poolto read pool stats (pg-pool exposes these).DbPoolMetricsCollectorthat polls pool stats every 15 seconds.MetricsModule.Impacted Files:
src/monitoring/metrics/src/monitoring/collectors/db-pool-metrics.collector.tsAcceptance Criteria