一、内置监控工具(原生视图与命令)
CentOS上的PostgreSQL自带丰富的监控工具,无需额外安装,适合快速排查基础问题:
SELECT datname, usename, state, query, now() - query_start AS duration FROM pg_stat_activity WHERE state = 'active';(筛选活跃连接的SQL及耗时)。CREATE EXTENSION pg_stat_statements;),再通过查询获取TOP慢SQL:SELECT query, calls, total_time, mean_time FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;。SELECT datname, (blks_hit + blks_read) AS total_reads, blks_hit, (blks_hit::float / (blks_hit + blks_read)) * 100 AS cache_hit_rate FROM pg_stat_database;(缓存命中率≥98%为佳)。SELECT pid, usename, application_name, client_addr, state, write_lag, flush_lag, replay_lag FROM pg_stat_replication;(lag为延迟时间,单位毫秒)。systemctl status postgresql(检查服务运行状态)、pg_isready -U postgres(测试连接是否正常)、psql -U postgres -c "SELECT 1;"(验证数据库响应)。二、日志分析工具
通过分析PostgreSQL日志,可深入了解错误、慢查询及系统行为:
pgbadger /var/log/postgresql/postgresql-*.log即可生成报告。三、第三方监控工具
针对企业级需求,可选择功能全面的第三方工具,实现实时监控、告警与可视化:
postgres_exporter(PostgreSQL专用exporter)采集指标(如TPS、QPS、缓存命中率、连接数);postgres_exporter作为target,最后配置Grafana dashboard。四、自定义脚本与告警
通过编写脚本定期检查关键指标,结合邮件、钉钉等工具发送告警,适合定制化需求:
#!/bin/bash
IDLE_CONNS=$(psql -U postgres -t -c "SELECT COUNT(*) FROM pg_stat_activity WHERE state = 'idle';")
THRESHOLD=50 # 阈值
if [ "$IDLE_CONNS" -gt "$THRESHOLD" ]; then
echo "警告:PostgreSQL空闲连接数超过阈值!当前值:$IDLE_CONNS" | mail -s "PostgreSQL告警" admin@example.com
fi
将脚本添加到cron(如每5分钟运行一次),即可实现空闲连接数的自动监控与告警。