在 Debian 上监控 PostgreSQL 的运行状态,可以从系统层、数据库层、日志层、以及自动化工具几个角度来做。下面按实用程度由浅入深说明。
systemctl status postgresql
或指定版本(如 15):
systemctl status postgresql@15-main
常见状态:
active (running):正常failed:异常ps aux | grep postgres
ss -tlnp | grep 5432
sudo -u postgres psql
SELECT count(*) FROM pg_stat_activity;
\dx
SELECT * FROM pg_stat_database;
SELECT pid, state, query, now()-query_start AS duration
FROM pg_stat_activity
WHERE state <> 'idle'
ORDER BY duration DESC;
SELECT * FROM pg_locks WHERE NOT granted;
/var/log/postgresql/postgresql-15-main.log
实时查看:
tail -f /var/log/postgresql/postgresql-15-main.log
建议开启的日志参数(postgresql.conf):
logging_collector = on
log_min_duration_statement = 1000 # 记录慢查询
log_connections = on
log_disconnections = on
修改后重启:
systemctl restart postgresql
CREATE EXTENSION pg_stat_statements;
查看最耗资源的 SQL:
SELECT query, calls, total_exec_time
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;
apt install prometheus-postgres-exporter
配合 Grafana 做仪表盘。
图形化查看状态、锁、连接。
SELECT * FROM pg_stat_replication;
从库查看:
SELECT * FROM pg_stat_wal_receiver;
#!/bin/bash
if ! systemctl is-active --quiet postgresql; then
echo "PostgreSQL is DOWN" | mail -s "PG Alert" admin@x.com
fi
如果你愿意,可以告诉我:
我可以给你一套更针对性的监控方案。