通过部署postgres_exporter采集PostgreSQL指标,结合Prometheus抓取数据并使用Grafana可视化,实现云原生环境下PostgreSQL的高效监控。1. 创建专用监控用户并授予权限;2. 部署postgres_exporter容器暴露:9187/metrics;3. 配置Prometheus通过ServiceMonitor或静态配置抓取指标;4. 在Grafana导入官方Dashboard(如ID 9628)展示连接数、慢查询、WAL速率等关键指标,并基于PromQL设置告警规则,保障数据库可观测性。

PostgreSQL 在云原生环境中运行时,通常以容器化方式部署在 Kubernetes 上。为了实现对 PostgreSQL 的高效、实时监控,集成 Prometheus 是一种主流且成熟的做法。以下是完整的 Prometheus 监控 PostgreSQL 的集成方案。
1. 使用 Prometheus Exporter 采集 PostgreSQL 指标
Prometheus 本身不能直接抓取 PostgreSQL 的内部状态,需要借助 postgres_exporter(也叫 prometheus-postgres-exporter)作为中间代理,将 PostgreSQL 的性能指标暴露为 Prometheus 可读的格式。
关键步骤:
CREATE USER postgres_exporter WITH PASSWORD 'your_secure_password'; ALTER USER postgres_exporter SET SEARCH_PATH TO postgres_exporter,pg_catalog; CREATE SCHEMA IF NOT EXISTS postgres_exporter; GRANT USAGE ON SCHEMA pg_catalog TO postgres_exporter; GRANT SELECT ON pg_stat_database TO postgres_exporter; -- 更多权限可参考官方推荐 SQL 脚本
wrouesnel/postgres_exporter 启动 exporter 服务。export DATA_SOURCE_NAME="postgresql://postgres_exporter:password@localhost:5432/postgres?sslmode=disable"
:9187/metrics 暴露指标,如:pg_up{datname="postgres"} 1
pg_stat_database_numbackends{datname="postgres"} 3
pg_longest_query_time_seconds 12.42. 在 Kubernetes 中部署 Postgres 和 Exporter
若使用云原生架构,建议将 PostgreSQL(如通过 Crunchy Data Operator 或 Zalando Postgres Operator 部署)与 exporter 一同部署。
部署方式示例(Sidecar 模式或独立 Deployment):
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-exporter
spec:
replicas: 1
selector:
matchLabels:
app: postgres-exporter
template:
metadata:
labels:
app: postgres-exporter
spec:
containers:
- name: postgres-exporter
image: wrouesnel/postgres_exporter:v0.14.0
env:
- name: DATA_SOURCE_URI
value: "postgres-service:5432/postgres?sslmode=disable"
- name: DATA_SOURCE_USER
value: "postgres_exporter"
- name: DATA_SOURCE_PASS
valueFrom:
secretKeyRef:
name: postgres-exporter-secret
key: password
ports:
- containerPort: 9187
---
apiVersion: v1
kind: Service
metadata:
name: postgres-exporter
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9187"
spec:
selector:
app: postgres-exporter
ports:
- name: metrics
port: 9187
targetPort: 91873. 配置 Prometheus 抓取指标
确保 Prometheus 能发现并抓取 exporter 暴露的端点。
在 Prometheus 配置中添加 job:
scrape_configs:
- job_name: 'postgres'
static_configs:
- targets: ['postgres-exporter:9187']如果使用 Prometheus Operator 和 ServiceMonitor:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: postgres-exporter-monitor
labels:
release: prometheus-stack # 与 Prometheus 实例的 selector 匹配
spec:
selector:
matchLabels:
app: postgres-exporter
endpoints:
- port: metrics
interval: 30s4. 使用 Grafana 展示监控面板
导入官方推荐的 Grafana Dashboard(如 ID: 9628 或 17495),可视化以下关键指标:
pg_stat_database_numbackends)blks_hit / (blks_hit + blks_read))可通过自定义 PromQL 查询构建告警规则,例如:
- alert: HighConnectionUsage
expr: rate(pg_stat_database_xact_commit[5m]) > 1000
for: 5m
labels:
severity: warning
annotations:
summary: "PostgreSQL 提交事务过高"基本上就这些。整个流程在云原生环境下稳定可靠,结合 Kubernetes 的弹性与 Prometheus 的生态,能有效保障 PostgreSQL 服务的可观测性。
以上就是postgresql云原生监控如何集成_prometheus监控postgresql方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号