❓想要实时掌握 PostgreSQL 数据库的运行状态? 想知道复制延迟、锁等待这些核心指标? 这篇文章带你从零开始,在 Windows 上搭建一套企业级的监控系统。无论你是后端开发、DBA 还是微服务架构师,这套组合都能帮你快速定位数据库瓶颈,保障服务稳定。
一、我们要搭建什么?
这套监控系统由三个核心组件构成:
- Prometheus:负责采集和存储 PostgreSQL 的性能数据,是后端监控体系中的关键中间件。
- Grafana:负责将数据以漂亮的图表展示出来,支持告警和历史查询。
- postgres_exporter:一个“翻译官”,负责从 PostgreSQL 中提取指标并提供给 Prometheus。
最终效果:你可以通过浏览器直观地看到 PostgreSQL 的 QPS、连接数、复制延迟、锁等待等关键指标,并支持历史数据查询和告警。这套方案在微服务架构中尤其常见,能帮助团队快速发现数据库层面的性能问题。
二、环境准备
在开始之前,请确保你的环境满足以下条件:
- 操作系统:Windows 10 / Windows Server 2016 及以上
- 数据库:已安装 PostgreSQL 9.6 及以上版本(本文以 PostgreSQL 16 为例)
- 网络:确保防火墙放通必要的端口(见文末)
如果你正在运行多个微服务实例,建议为每个数据库实例独立配置 exporter,以便精细监控。
三、安装 Prometheus
Prometheus 是一个独立的可执行文件,不需要安装,下载解压即可。

下载
访问 Prometheus 官方下载页面,选择 windows-amd64 版本(例如 prometheus-最新版本号.windows-amd64.tar.gz)。
解压
将压缩包解压到你想存放的目录,比如 D:\prometheus。解压后会看到 prometheus.exe 和 prometheus.yml 等文件。
修改配置
用记事本打开 prometheus.yml,找到 scrape_configs 部分,在末尾添加下面内容(用于后续抓取 postgres_exporter 的数据):
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
# ⬇️新增 PostgreSQL 监控任务(占位,等配置好 exporter 后启用)
- job_name: "postgresql"
static_configs:
- targets: ["localhost:9187"]
启动 Prometheus
双击 prometheus.exe 会弹出一个命令行窗口,看到 Server is ready to receive web requests 即表示启动成功。
⚠️ 注意:这个窗口关闭后 Prometheus 就会停止,生产环境建议将其注册为 Windows 服务(可使用 NSSM 工具)。

验证
打开浏览器访问 http://localhost:9090,看到 Prometheus 的 Web UI 即为正常。

四、安装 Grafana
Grafana 提供 Windows 安装包,一路下一步即可。

下载
访问 Grafana 官方下载页面,选择 Windows 版本,下载 .msi 安装包(或者绿色压缩包 .tar.gz)。
安装
双击 .msi 文件,按向导完成安装。安装后 Grafana 会自动以 Windows 服务形式在后台运行。如果是下载 .zip 压缩包,则解压后打开即可。

(如果是绿色版则在 bin 里面找到 grafana-server.exe,双击打开)

访问 Grafana
打开浏览器访问 http://localhost:3000,默认用户名/密码为 admin/admin。登录后系统会要求你修改密码。

添加 Prometheus 数据源




️ 五、配置 postgres_exporter
这是连接 PostgreSQL 和 Prometheus 的桥梁,也是后端监控体系中的关键一环。

下载
访问 postgres_exporter 官方发布页面,下载 postgres_exporter-最新版本号.windows-amd64.tar.gz。
解压
将文件解压到 D:\postgres_exporter。

创建数据库监控用户
使用 pgAdmin 或 DBeaver 连接到 PostgreSQL,执行以下 SQL 创建专用用户(懒人做法:直接用你的 postgres super user,生产环境不建议!):
CREATE USER postgres_exporter WITH PASSWORD 'moshow123';
GRANT CONNECT ON DATABASE postgres TO postgres_exporter;
GRANT pg_monitor TO postgres_exporter;

如果您的 PostgreSQL 版本低于 10,需手动授予相关视图权限,但建议升级至 10 以上。
设置连接信息并启动
打开命令提示符(cmd),执行:
cd D:\Software\monitoring\postgres_exporter-0.19.0.windows-amd64
set DATA_SOURCE_NAME=postgresql://postgres_exporter:moshow123@localhost:5432/postgres?sslmode=disable
postgres_exporter.exe --web.listen-address=:9187
看到日志输出 Starting Server 即为成功。

此时可以访问 http://localhost:9187/metrics 查看采集到的指标。

验证 Prometheus 是否抓取
回到 Prometheus Web UI,点击 Status → Targets,找到 postgresql 任务,状态应为 UP。如果状态为 DOWN,检查防火墙是否放通了 9187 端口。

六、导入 Grafana 仪表盘
现在数据已经打通,我们直接使用社区优秀的仪表盘模板,无需自己画图。
找一个合适的仪表盘
推荐使用 ID 9628,这个专为 postgres_exporter 设计,包含复制延迟、锁监控等面板。(可以到 Grafana Dashboards 慢慢挑选!)
导入仪表盘查看效果
仪表盘会立即显示当前数据库的各项指标。如果之前没有数据,可以等几分钟后再看。
收藏 Dashboard
如果你忘了点收藏,它可能就消失了,你需要去 Recently Viewed Dashboards 里面找到它,给它点个 收藏一下。

欣赏 Dashboard



七、压测
先通过 psql 连接到目标数据库,建一张简单的表用于写入:
CREATE TABLE random_writes (
id SERIAL PRIMARY KEY,
value TEXT,
created_at TIMESTAMP DEFAULT now()
);
测试随机生成 1w 条数据:
DO $
DECLARE
i INT; -- 声明变量放在 BEGIN 之前
BEGIN
FOR i IN 1..10000 LOOP
INSERT INTO random_writes (value) VALUES (md5(random()::text));
PERFORM pg_sleep(0.01); -- 可选延迟
END LOOP;
END $;


[AFFILIATE_SLOT_1]
八、总结
通过以上步骤,你已经拥有了一套完整的 PostgreSQL 监控系统:
- ✅ Prometheus 负责数据存储
- ✅ Grafana 负责可视化
- ✅ postgres_exporter 负责采集数据库指标
现在你可以随时查看数据库的健康状况,无论是复制延迟、死锁,还是慢查询,都一目了然。如果你还想监控更多的数据库,只需在 prometheus.yml 中增加新的 targets 即可。这套组合在微服务架构中非常实用,能帮助后端团队快速排查数据库瓶颈,保障 API 响应速度。
[AFFILIATE_SLOT_2]-------------------------------------
浙公网安备 33010602011771号