在 CentOS 上监控 PostgreSQL,可以从 系统级、数据库级、日志、第三方工具 四个层面来做。下面给你一套从“基础 → 进阶 → 企业级”的完整方案。
ps -ef | grep postgres
ss -lntp | grep postgres
# 或
netstat -lntp | grep postgres
top -u postgres
htop
df -h
du -sh /var/lib/pgsql/*
pg_stat_* 视图(最重要)进入数据库:
sudo -u postgres psql
SELECT count(*) FROM pg_stat_activity;
SELECT pid, usename, application_name, state, query
FROM pg_stat_activity
WHERE state = 'active';
SELECT pid, now() - query_start AS duration, query
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY duration DESC;
SELECT relname, pg_size_pretty(pg_total_relation_size(relid))
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;
SELECT relname, idx_scan, seq_scan
FROM pg_stat_user_tables;
SELECT datname, numbackends, xact_commit, xact_rollback
FROM pg_stat_database;
编辑配置文件:
vim /var/lib/pgsql/data/postgresql.conf
推荐配置:
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_min_duration_statement = 500 # 记录超过 500ms 的 SQL
log_connections = on
log_disconnections = on
重启 PostgreSQL:
systemctl restart postgresql
tail -f /var/lib/pgsql/data/log/postgresql-*.log
yum install -y epel-release
yum install -y pgbadger
pgbadger /var/lib/pgsql/data/log/postgresql.log -o /var/www/html/pgbadger.html
浏览器打开即可看到:
PostgreSQL → postgres_exporter → Prometheus → Grafana
yum install -y golang
wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.15.0/postgres_exporter-0.15.0.linux-amd64.tar.gz
export DATA_SOURCE_NAME="postgresql://postgres:password@localhost:5432/postgres?sslmode=disable"
./postgres_exporter
9628Zabbix 自带 PostgreSQL 模板:
| 分类 | 指标 |
|---|---|
| 连接 | 当前连接数 |
| 性能 | QPS / TPS |
| 查询 | 慢查询 |
| 锁 | 等待锁 |
| 缓存 | 缓存命中率 |
| 磁盘 | 数据目录大小 |
| 错误 | 日志异常 |
-- 查看锁
SELECT * FROM pg_locks;
-- 查看阻塞
SELECT pid, usename, query, wait_event_type
FROM pg_stat_activity
WHERE wait_event_type IS NOT NULL;
✅ 小环境
pg_stat_activity + 日志✅ 生产环境
✅ 日志分析
如果你愿意,我可以:
你现在用的是 单机还是主从?PostgreSQL 几版本?