Grafana 监控面板
两套精选的 Grafana 监控面板,用于监控 Alauda CloudNativePG (CNPG) 集群,基于 CNPG 内置指标导出器构建:
static/grafana/cluster-overview.json— 集群健康状况:实例状态、主实例标识、复制堆积量、 连接数、每秒事务数、缓存命中率、存储和 WAL 使用情况(24 个图表)。static/grafana/backup-monitoring.json— 持续备份健康状况:距离上次成功备份的时间、备份 失败指示、时间点恢复窗口、WAL 归档速率 和积压量、WAL 容量(15 个图表)。
这两个监控面板都已在 Alauda Container Platform 上一个 包含 2 个实例的 CNPG 集群中完成验证(通过 barman-cloud 插件将备份写入对象 存储,使用 pgbench 负载):每个图表查询都已验证可从平台 Prometheus 返回数据。
目录
内置导出器与postgres-exporter 对比导出器暴露的内容安装1. 创建带有平台要求标签的 PodMonitor2. 将 Grafana 指向平台 Prometheus3. 导入监控面板图表到指标映射已知限制内置导出器与 postgres-exporter 对比
如果你来自基于 Zalando 的 PostgreSQL 技术栈,监控通常
会使用一个单独的 postgres-exporter sidecar。CNPG 会在每个
实例 Pod 中嵌入一个导出器(端口 9187)——无需额外部署:
不要将 postgres-exporter 挂接到 CNPG cluster 上——这样会
重复抓取,而且仍然缺少 operator 级别的健康指标。如果你依赖
pg_stat_user_tables / pg_stat_statements 图表,
请将这些查询迁移到 customQueriesConfigMap 中(查询 YAML 方言基本相同);将监控面板序列从 pg_*
重命名为 cnpg_pg_*。
导出器暴露的内容
- 原生指标(
cnpg_collector_*):实例 up、PostgreSQL 版本、fencing、manual-switchover-required、已使用节点、同步 Replica 数量、WAL 段数量/大小、WAL 归档状态 (ready/done),以及(PG ≥ 14)WAL 写入/同步统计。 - 默认查询(
cnpg_<query>_*,来自 operator 管理的cnpg-default-monitoringConfigMap):backends、pg_database、pg_replication、pg_replication_slots、pg_stat_archiver、pg_stat_bgwriter/pg_stat_checkpointer、pg_stat_database、pg_stat_replication、pg_settings、pg_extensions。 - 插件指标:CNPG-i 插件通过同一端点发布指标。
barman-cloud 插件(此产品随附的备份方式)
暴露
barman_cloud_cloudnative_pg_io_last_available_backup_timestamp、..._last_failed_backup_timestamp和..._first_recoverability_point。
使用由插件管理的备份时,旧版
cnpg_collector_last_available_backup_timestamp /
..._first_recoverability_point 指标会保持为 0——它们读取的是插件未设置的内置
状态字段。备份监控面板会优先查询插件序列,并在没有数据时回退到内置序列,因此无论是
插件、volume-snapshot,还是旧版内置 barman 备份都能正常工作。
安装
1. 创建带有平台要求标签的 PodMonitor
导出器始终可用;你需要添加的是一个 PodMonitor,以便
平台 Prometheus 抓取它。在 Alauda Container Platform 中,平台 Prometheus
(cpaas-system 中的 kube-prometheus-0)会选择
所有命名空间中的监控,但仅限于带有标签
prometheus: kube-prometheus 的对象:
在 Cluster 上设置 spec.monitoring.enablePodMonitor: true 也可以,
但在 CNPG 1.29 中已弃用,并且生成的 PodMonitor 不带所需标签——如果你使用它,请通过
spec.inheritedMetadata.labels 传递该标签。
验证抓取结果:
2. 将 Grafana 指向平台 Prometheus
Grafana ≥ 9.x,使用 Prometheus 数据源。
ACP Prometheus 服务
(kube-prometheus-0-web.cpaas-system.svc:9090 和 Thanos query
service)位于 OAuth(dex)代理之后——使用普通 URL 的数据源
收到的是重定向,而不是数据。你可以为数据源配置一个
Authorization: Bearer <platform id_token> 自定义 HTTP header,或者
如果 Grafana 运行在 cluster 内,则直接指向 Prometheus 容器
端口(prometheus-kube-prometheus-0-0 Pod 上的 9090 端口不会被代理;OAuth sidecar 只负责服务的 target port)。
3. 导入监控面板
UI:Dashboards → New → Import → Upload JSON file — 下载
cluster-overview.json 和
backup-monitoring.json,在提示时选择你的
Prometheus 数据源。这两个监控面板都提供 namespace
和 cluster 模板变量(从 cnpg_collector_up 中发现),
因此一次导入即可覆盖平台上的所有 CNPG cluster。
图表到指标映射
备份大小是刻意未包含的:CNPG 不会将其作为
指标导出。请从 Backup 资源状态
(kubectl get backup <name> -o jsonpath='{.status}')或对象
存储中读取;Database size / WAL on disk 图表可作为容量
替代指标。
已知限制
- 基于
pg_stat_replication的图表只有在 primary 上 且至少存在一个流复制 Replica 时才会产生数据——在 1 实例 cluster 上它们为空是正常的。 - 备份新鲜度图表覆盖 barman-cloud 插件和内置方法;其他备份插件 需要额外添加它们对应的序列。
- Grafana 本身并不随 CNPG 插件一起提供;请自行部署 (已使用 Grafana 9.5 验证)。