PostgreSQL 指标导出器
postgres_exporter 默认监听 9187 的 /metrics:它用一条连接串连库,采集 pg_stat 系列视图,以及数据库大小、连接数、事务提交与回滚、复制状态等指标,是慢查询与复制延迟告警的数据来源。监控账号应使用专用的最小权限角色。
基本信息
| 服务 | postgres_exporter |
|---|---|
| 协议 | TCP/HTTP(/metrics) |
| 默认端口 | 9187 |
| 连接配置 | DATA_SOURCE_NAME 环境变量或配置文件 |
| 暴露面 | 仅监控网段 |
典型使用场景
- 连接数与事务提交、回滚速率监控
- 流复制状态与复制延迟告警
- 数据库与表级大小增长趋势,为容量做准备
- 锁等待与长事务发现,避免连接被占满
- 用 pg_up 替代简单的端口探测做健康检查
部署与验证
部署与验证
export DATA_SOURCE_NAME='postgresql://monitor:***@127.0.0.1:5432/postgres'
postgres_exporter --web.listen-address=:9187
curl -s http://pg01:9187/metrics | grep -E 'pg_up|pg_stat_database_numbackends'
# 同时在 pg_hba.conf 中只允许监控主机连接排障与核对
| 检查项 | 做法 | 异常表现 |
|---|---|---|
| 导出器存活 | curl -s http://host:9187/metrics | 连不上:进程未起或监听地址错误 |
| 数据库连通 | pg_up 指标 | 为 0:连接串、pg_hba 或网络策略问题 |
| 连接数 | pg_stat_database_numbackends | 逼近 max_connections:业务开始报连接失败 |
| 复制 | 复制延迟相关指标 | 延迟上涨:先看网络与主库写入量 |
连接串里的口令最常见的泄露途径是写进 systemd 单元的 Environment 或部署脚本:优先用独立配置文件并收紧读权限,或让导出器以专用账号运行、只允许该账号读取口令文件。
监控账号的权限边界
监控账号只需要读取统计视图:较新版本可使用 pg_monitor 角色,老版本按需单独授权统计视图与相关函数。为了省事直接给 superuser,一旦监控主机被入侵,数据库就完全敞开,收益与风险完全不成比例。
pg_up 只说明导出器能连上库,不代表业务正常:连接池打满时数据库仍在服务,但新连接会被拒。业务健康度要结合连接数、活跃事务与慢查询指标一起看,单指标告警很容易漏判。
监控账号给 superuser:监控系统一旦失守,等同于数据库管理员权限外泄,事后也无法从数据库侧限制其操作。