前言
PostgreSQL上手简单,但性能排查一直是很多人的痛点。面对数据库卡顿、响应超时、锁等待、表膨胀,很多人只能反复手写SQL查询状态,既低效又容易遗漏关键问题。如果搭建Prometheus+Grafana+postgres_exporter整套监控栈,组件繁多、配置复杂,新手很容易卡在看板调试上;pgwatch3功能强大,但体量偏重,配置门槛也不低。
而PgHero就是一款恰到好处的轻量开源PG监控工具。它不需要复杂的监控链路,开箱自带可视化面板,慢SQL捕获、连接状态、长事务、锁信息、缺失索引、表膨胀统计全部内置,甚至可以直接给出索引优化建议,开发和运维都能快速看懂。
本文就带大家在fnOS上通过Docker部署PgHero,一步步完成配置,把慢查询监控搭建起来。
1.PgHero是什么?
PgHero是MIT协议开源、轻量的PostgreSQL网页性能仪表盘,用来定位慢查询、索引问题、表膨胀,给出优化建议,依赖 pg_stat_statements 扩展,支持Docker一键部署。
核心功能
- 慢查询排行、Explain执行计划查看
- 检测无用索引、重复索引、缺失索引
- 连接监控、空闲连接、表膨胀、Vacuum提醒
- 表 / 索引占用空间统计
和其他工具区别
- 和pgAdmin:pgAdmin偏重数据库管理(建表、改结构);PgHero只聚焦性能优化,界面更简单,不做 DDL 管理
- 和Prometheus+Grafana:Grafana适合长期时序大盘;PgHero开箱即用,自带优化建议,不用复杂指标配置
- 和pganalyze:pganalyze采集能力更强;PgHero纯自托管、无采集代理,轻量免费
优缺点
✅ 优点
- 轻量,资源占用极低,部署一行命令搞定
- 不需要在数据库里装复杂采集组件,只需要开启
pg_stat_statements - 结论导向,不是只堆指标,直接给出优化动作
- 纯本地,数据不出库,内网、私有化环境友好
- 界面简洁,开发不用懂很多 DBA 知识也能看懂
❌ 局限
- 依赖
pg_stat_statements,需要修改shared_preload_libraries并重启 PostgreSQL,部分云数据库不支持加载该扩展 - 时序历史数据保存能力弱,不适合做长期告警
- 没有权限管理、细粒度审计,不适合直接对外暴露公网
- 自动索引建议比较保守,只能作为参考,不能直接上线
适合场景
开发自测 SQL 性能、小团队数据库巡检、内网 Postgres 性能看板、Docker 集群快速搭一个性能面板;不适合替换专业监控告警平台,也不适合当做数据库日常管理工具。
一句话总结
适合开发、DBA 快速排查 Postgres 性能瓶颈,轻量化、开箱即用。
2.安装前提条件
2.1ssh远程连接到飞牛
- 开启【SSH服务】
- 使用终端(Windows PowerShell / Mac Terminal)登录:
在设置—>SSH中开启SSH服务:
2.2验证docker是否开启
使用命令:
docker -v
systemctl status -v
也可以直接在飞牛主页查看(其他机器也是这样的哦~)
3.安装Postgres
安装过的小伙伴们,可以跳过这个章节~
新建目录:
mkdir -p /opt/pghero-meta && cd /opt/pghero-meta
编辑postgres.yml:
version: "3.8"
services:
pg-meta:
image: postgres:16-alpine
container_name: pghero-meta
restart: unless-stopped
environment:
POSTGRES_USER: pghero
POSTGRES_PASSWORD: Meta@Pass123
POSTGRES_DB: pghero
TZ: Asia/Shanghai
ports:
- "5432:5432"
volumes:
- pghero-meta-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U pghero -d pghero"]
interval: 10s
timeout: 5s
retries: 5
volumes:
pghero-meta-data:
启动 PG:
docker compose -f postgres.yml up -d
验证 PG 正常:
docker exec -it pghero-meta psql -U pghero -d pghero
✅ 此时:本机 5432 就是这个 PG,专门给 PgHero 使用
4.安装PgHero
编辑pghero.yml:
services:
pghero:
image: ankane/pghero
container_name: pghero
restart: unless-stopped
ports:
- "8080:8080"
environment:
# DATABASE_URL:PgHero自己后台库,容器内部访问 pghero-meta:5432
DATABASE_URL: postgres://pghero:MetaPass123@pghero-meta:5432/pghero
DATABASE_URLS: postgres://pghero:MetaPass123@pghero-meta:5432/pghero
PGHERO_USERNAME: admin
PGHERO_PASSWORD: Hero@2026
TZ: Asia/Shanghai
docker compose -f pghero.yml up -d
验证容器状态:
docker ps
部署完成后,在浏览器中输入 http://飞牛IP:8080 就能看到PgHero的界面:
5.使用PgHero
PgHero 已成功部署并连接上本机 PostgreSQL 实例,基础监控(连接数、真空状态、索引校验等)正常;当前因未开启pg_stat_statements扩展,暂时无法展示慢查询统计,在 postgresql.conf 配置加载该扩展并重启数据库、创建扩展后,即可启用 SQL 调用与慢查询分析能力。
PgHero 空间监控页面正常加载,当前数据库总大小 7.4MB,暂未发现超过 10MB 的未使用索引,可直观查看库表占用空间。
PgHero 连接监控面板正常展示,当前数据库共有 7 个连接,支持按照数据库、用户两个维度以饼图直观拆分连接分布情况,同时可查看连接来源,方便及时发现连接数异常、连接泄露等问题。
PgHero的Explain页面提供SQL执行计划分析能力,可在输入框内填入SQL语句,通过Explain查看文本执行计划、Visualize生成可视化执行图谱,用来定位SQL低效、扫描方式不合理等性能问题,辅助SQL优化。
PgHero的Tune调优页面可直接查看PostgreSQL16当前核心参数配置,包含最大连接数、共享缓冲区、work_mem、WAL相关等关键配置项,还支持跳转PgTune获取适配的调优建议,方便直观掌握数据库参数现状并针对性优化性能。
将 PgHero 与 cpolar 搭配使用,可把部署在内网、Docker 中的 PgHero 监控面板安全暴露到公网,无需公网 IP 与路由器端口映射,随时随地在外网访问 PostgreSQL 的连接、空间、SQL 执行计划、参数调优等监控能力,方便远程查看数据库运行状态、排查性能问题。
6.安装cpolar实现随时随地开发
6.1 什么是cpolar?
cpolar是一款安全高效的内网穿透工具,无需公网IP或复杂配置,只需一条命令,即可将本地服务器、Web服务或任意端口映射到公网,让你随时随地远程访问内网应用,特别适合开发调试、远程运维和应急部署等场景。
6.2 部署cpolar
cpolar可以将你本地电脑中的服务(如SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。
❤️以下是安装cpolar步骤:
使用一键脚本安装命令:
sudo curl https://get.cpolar.sh | sh
安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)
sudo systemctl status cpolar
Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:
打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。
7.配置公网地址
登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:
- 隧道名称:可自定义,本例使用了:PgHero,注意不要与已有的隧道名称重复
- 协议:http
- 本地地址:8080
- 域名类型:随机域名
- 地区:选择China Top
创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用地址访问。
访问成功。
8.保留固定公网地址
使用cpolar为其配置二级子域名(cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站),该地址为固定地址,不会随机变化。
点击左侧的预留,选择保留二级子域名,地区选择china Top,然后设置一个二级子域名名称,我使用的是PgHero,大家可以自定义。填写备注信息,点击保留。
登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道,点击右侧的编辑。
修改隧道信息,将保留成功的二级子域名配置到隧道中
- 域名类型:选择二级子域名
- Sub Domain:填写保留成功的二级子域名
- 地区: China Top
点击更新
更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。
最后,我们使用固定的公网地址在任意设备的浏览器中访问,可以看到成功访问的页面,这样一个永久不会变化的二级子域名公网网址即设置好了。
总结
到这里,这套轻量好用的 PostgreSQL 监控方案就部署完成了!开源封神的 PgHero 上手简单、功能精炼,连接、空间、执行计划、参数调优能力一应俱全,搭配 cpolar 内网穿透,不用公网 IP 也能远程访问面板,一键定位慢 SQL,轻松搞定 PG 日常运维与性能排查,是个人和小业务场景里性价比极高的数据库监控选择。
感谢您对本篇文章的喜爱,有任何问题欢迎留言交流。cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站
































