温馨提示×

怎么监控CentOS PostgreSQL

小樊
38
2026-07-21 10:20:40
栏目: 云计算

监控 CentOS 上的 PostgreSQL 可以从 系统级、数据库级、日志、以及可视化工具 四个层面来做。下面给你一套从“基础 → 进阶 → 生产级”的完整方案。


一、系统级监控(CentOS 层面)

1️⃣ CPU / 内存 / 磁盘 / 网络

top
htop
vmstat 1
iostat -x 1
free -h
df -h

关注点:

  • CPU%us / %sy
  • 内存:是否 swap 频繁
  • 磁盘 IO%util 是否接近 100%
  • 网络:连接数、带宽

2️⃣ PostgreSQL 进程监控

ps -ef | grep postgres

重点进程:

  • postgres: main process
  • postgres: checkpointer
  • postgres: background writer
  • postgres: walwriter
  • postgres: autovacuum launcher

二、数据库级监控(核心)

1️⃣ 查看当前连接

SELECT * FROM pg_stat_activity;

常用字段:

  • pid
  • usename
  • datname
  • state
  • query
  • query_start

查看连接数:

SELECT count(*) FROM pg_stat_activity;

2️⃣ 查看数据库整体状态

SELECT * FROM pg_stat_database;

关键指标:

  • numbackends(连接数)
  • xact_commit / xact_rollback
  • blks_read / blks_hit(缓存命中率)

3️⃣ 查询性能监控

SELECT * FROM pg_stat_statements;

启用方式:

CREATE EXTENSION pg_stat_statements;

postgresql.conf

shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.track = all

4️⃣ 表 & 索引监控

SELECT * FROM pg_stat_user_tables;
SELECT * FROM pg_stat_user_indexes;

关注:

  • seq_scan(全表扫描)
  • idx_scan
  • n_tup_upd / n_tup_del

5️⃣ 锁监控(非常重要)

SELECT * FROM pg_locks;

结合:

SELECT 
  a.pid,
  a.usename,
  a.query,
  l.locktype,
  l.mode
FROM pg_locks l
JOIN pg_stat_activity a ON l.pid = a.pid;

三、日志监控(问题排查)

1️⃣ PostgreSQL 日志位置

find /var/lib/pgsql -name "postgresql*.log"

常见路径:

/var/lib/pgsql/13/data/log/

2️⃣ 关键日志配置

postgresql.conf

logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_min_duration_statement = 500   # 慢查询 500ms
log_connections = on
log_disconnections = on
log_lock_waits = on

四、命令行工具

1️⃣ pg_top(类似 top)

yum install ptop
pg_top

2️⃣ 查看 WAL / 检查点

SELECT * FROM pg_stat_bgwriter;
SELECT * FROM pg_stat_wal;

五、生产级监控方案(强烈推荐)

✅ 方案 1:Prometheus + Grafana(最主流)

组件

  • postgres_exporter
  • Prometheus
  • Grafana

监控内容

  • QPS / TPS
  • 连接数
  • 锁等待
  • 缓存命中率
  • 表/索引大小
  • 慢查询

示例 Grafana 面板

  • PostgreSQL Overview
  • PostgreSQL Details
  • Query Performance

✅ 方案 2:Zabbix 监控 PostgreSQL

  • 系统指标 + 自定义 SQL 监控
  • 告警能力强
  • 适合传统运维环境

六、常用监控命令速查表

项目 命令
当前连接 pg_stat_activity
慢查询 pg_stat_statements
pg_locks
表扫描 pg_stat_user_tables
缓存命中率 blks_hit / blks_read
日志 postgresql-*.log

七、建议的告警阈值(参考)

  • 连接数 > 80% max_connections
  • 慢查询 > 500ms
  • 缓存命中率 < 95%
  • 锁等待 > 0
  • Swap 使用 > 0

如果你愿意,我可以: ✅ 给你一套 Prometheus + Grafana 完整部署方案
✅ 针对 CentOS 7 / 8 + PostgreSQL 12/13/14/15 定制
✅ 教你 只看 5 个最重要的指标

你现在用的是 PostgreSQL 几?CentOS 几?单机还是主从?

0