在 Debian 上监控 PostgreSQL,可以从系统层、数据库层、日志、第三方工具几个维度来做。下面按实用程度给你一套方案。
top
htop
free -h
df -h
iostat -x 1
重点关注:
systemctl status postgresql
journalctl -u postgresql -f
SELECT count(*) FROM pg_stat_activity;
查看连接来源:
SELECT datname, usename, client_addr, state, count(*)
FROM pg_stat_activity
GROUP BY 1,2,3,4;
SELECT pid, now()-query_start AS dur, state, query
FROM pg_stat_activity
WHERE state <> 'idle'
ORDER BY dur DESC;
SELECT relname, seq_scan, idx_scan, n_live_tup
FROM pg_stat_user_tables
ORDER BY seq_scan DESC;
SELECT * FROM pg_locks WHERE NOT granted;
SELECT * FROM pg_stat_replication;
/etc/postgresql/<version>/main/postgresql.conf
推荐配置:
logging_collector = on
log_min_duration_statement = 1000 # 慢于1秒
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d '
log_connections = on
log_disconnections = on
查看日志:
tail -f /var/log/postgresql/postgresql-*.log
pg_stat_statements(最推荐)启用:
shared_preload_libraries = 'pg_stat_statements'
CREATE EXTENSION pg_stat_statements;
查看最耗时 SQL:
SELECT query, calls, total_exec_time
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;
pg_topapt install pgtop
pg_top
类似 top,但针对 PostgreSQL。
组件:
postgres_exporter快速示例:
apt install prometheus postgresql-exporter
Grafana 模板:
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
自动监控 PG、CPU、IO。
适合已有 Zabbix 环境,模板成熟。
✅ 连接数是否接近 max_connections
✅ 是否有长事务 / 锁等待
✅ 磁盘空间(尤其是 WAL)
✅ 慢 SQL 趋势
✅ 主从延迟
✅ 备份是否成功
如果你愿意,可以告诉我:
我可以直接帮你给一套可复制的配置。