PgBouncer — Pooler Stats
If you front PostgreSQL with PgBouncer, MonPG surfaces its admin console stats.
Setup
Add the PgBouncer connection string in Settings → Servers → [server] → Connection pool. MonPG queries the special pgbouncer admin database every cycle for SHOW POOLS / SHOW STATS / SHOW MEM / SHOW CLIENTS data. The admin database is part of every PgBouncer install — you might just need to add a stats user to it.
What you see
The Pool table shows per-database, per-user pool metrics: client count (waiting plus active), server count (idle, active, login), pool size, max client connections. The signal worth watching is cl_waiting > 0 with sv_idle = 0 — pool exhaustion. The fix is raising default_pool_size; it almost always works.
Stats over time: total xact/query/wait time per pool, queries per second, server timing. PgBouncer exposes lifetime totals; we compute deltas so you see what happened in your selected window, not since pool start.
Built-in alerts: client wait time over 100ms p95, pool 90%+ utilization sustained 5 minutes, server connection failures rising. Tune defaults under Alerts & Check-Up.
Why bother
PostgreSQL forks a process per connection, and processes are heavy. Above roughly 200 backends you're spending 4-8GB on connection state alone. PgBouncer in transaction-pooling mode lets 5,000 client connections share 50 PostgreSQL backends, often with no app changes (assuming you're not using session-scoped features like prepared statements or temp tables in ways transaction-pool can't handle).