新增共享 PG 的 SQL 级指标与 dev 告警分流 #173

Merged
panxiao81 merged 5 commits from feat/shared-pg-sql-metrics into main 2026-10-01 16:33:05 +00:00
Owner

内容

  • 共享 PG 每个实例在自身主机运行 prometheus-community/postgres_exporter 0.20.1(prod :9187,dev :9188,仅内网地址)。安装包与官方 sha256sums.txt 共用 pg_exporter_version。
  • exporter 以实例 OS 用户走本地 socket,经 peer map=monitor + ident 映射登录 homelab_monitor(仅 pg_monitor、无密码、连接上限 3)。无 Bao、无 Terraform 变更。
    • ⚠ 这只约束 exporter 的查询,不是隔离边界:同一 OS 用户仍可经 peer 以 superuser 登录。InaccessiblePaths 只挡数据目录、私钥和 pgpass。
  • prod/dev 启用 pg_stat_statements。新 monitoring.yml 仅在未生效时 HUP Patroni、patronictl restart --pending 或重启 dev,重跑 changed=0。
  • 新 PrometheusRule shared-postgresql-sql(13 条,以上游 postgres_mixin 为底改写,阈值对齐 failover lag 1 MiB 与 max_slot_wal_keep_size)+ VMStaticScrape,目标带 env 标签。
  • Alertmanager 新增首条路由 env="dev" → telegram-dev(独立 dev 频道);既有 dev SQL 检查告警补 env: dev。

已验证

  • 主机端已于 2026-10-01 上线:两个 prod 成员按 pending 原位重启,时间线未变(未切换);三端点 pg_up 1、无采集失败,exporter 约 8 MiB;第二次运行 changed=0;vmagent Pod 可达三端点。
  • 隔离集成测试全部通过,新增:监控角色在主/备/dev 经 peer+ident 登录、读取 pg_stat_statements、不可写。
  • promtool 检查与全部规则测试(含 11 个新场景)、Kustomize 渲染、PrometheusRule/VMStaticScrape 服务端 dry-run、ansible-lint、amtool 路由测试(dev→telegram-dev,prod critical→telegram)。

合并后

  • Flux 应用后核对 up{job="shared-postgresql-sql"} 三个目标、规则组 operational,以及 dev 频道首条告警能送达(bot 需为频道管理员)。

未做

  • 表膨胀/未 vacuum 告警:现在没有业务表,等应用迁移后再加。
  • 现有 shared-postgresql.yaml 仍是手写 VMRule,未迁移到 PrometheusRule。

🤖 Generated with Claude Code

## 内容 - 共享 PG 每个实例在自身主机运行 prometheus-community/postgres_exporter 0.20.1(prod `:9187`,dev `:9188`,仅内网地址)。安装包与官方 `sha256sums.txt` 共用 `pg_exporter_version`。 - exporter 以实例 OS 用户走本地 socket,经 `peer map=monitor` + ident 映射登录 `homelab_monitor`(仅 `pg_monitor`、无密码、连接上限 3)。无 Bao、无 Terraform 变更。 - ⚠ 这只约束 exporter 的查询,不是隔离边界:同一 OS 用户仍可经 peer 以 superuser 登录。`InaccessiblePaths` 只挡数据目录、私钥和 pgpass。 - prod/dev 启用 `pg_stat_statements`。新 `monitoring.yml` 仅在未生效时 HUP Patroni、`patronictl restart --pending` 或重启 dev,重跑 `changed=0`。 - 新 PrometheusRule `shared-postgresql-sql`(13 条,以上游 `postgres_mixin` 为底改写,阈值对齐 failover lag 1 MiB 与 `max_slot_wal_keep_size`)+ VMStaticScrape,目标带 `env` 标签。 - Alertmanager 新增首条路由 `env="dev"` → `telegram-dev`(独立 dev 频道);既有 dev SQL 检查告警补 `env: dev`。 ## 已验证 - 主机端已于 2026-10-01 上线:两个 prod 成员按 pending 原位重启,时间线未变(未切换);三端点 `pg_up 1`、无采集失败,exporter 约 8 MiB;第二次运行 `changed=0`;vmagent Pod 可达三端点。 - 隔离集成测试全部通过,新增:监控角色在主/备/dev 经 peer+ident 登录、读取 `pg_stat_statements`、不可写。 - promtool 检查与全部规则测试(含 11 个新场景)、Kustomize 渲染、PrometheusRule/VMStaticScrape 服务端 dry-run、ansible-lint、amtool 路由测试(dev→telegram-dev,prod critical→telegram)。 ## 合并后 - Flux 应用后核对 `up{job="shared-postgresql-sql"}` 三个目标、规则组 operational,以及 dev 频道首条告警能送达(bot 需为频道管理员)。 ## 未做 - 表膨胀/未 vacuum 告警:现在没有业务表,等应用迁移后再加。 - 现有 `shared-postgresql.yaml` 仍是手写 VMRule,未迁移到 PrometheusRule。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
panxiao81 added 4 commits 2026-10-01 16:21:54 +00:00
- 数据库主机上按实例运行 prometheus-community/postgres_exporter 0.20.1,
  以实例 OS 用户走本地 socket,经 peer + ident 映射到仅有 pg_monitor 的
  homelab_monitor 角色;无密码、不经 Bao。版本与官方 sha256sums.txt 同源。
- prod/dev 启用 pg_stat_statements;monitoring.yml 仅在未生效时 reload/重启
  (prod 走 Patroni pending restart),重复执行 changed=0。
- 告警以上游 postgres_mixin 为底改写为 PrometheusRule,阈值对齐 Patroni
  failover lag 与 max_slot_wal_keep_size;抓取目标带 env 标签。
- Alertmanager 新增 env="dev" 路由到独立 dev 频道,dev SQL 检查告警补 env。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
只读探测在 check 模式下照常执行;依赖真实执行结果的等待与验证在 check 模式跳过。
patronictl JSON 会省略空值字段,pending 判断先检查键是否存在。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
docs: 记录共享 PG SQL 级指标的部署与验证
ansible / collection-test (pull_request) Successful in 9m52s
yaml / yaml (pull_request) Failing after 10m40s
ansible / lint (pull_request) Successful in 12m38s
954bb39a23
Co-Authored-By: Claude Opus 5.5 <[email protected]>
panxiao81 added 1 commit 2026-10-01 16:30:50 +00:00
新增主库落在 pve1(HDD)时的回切提示告警
yaml / yaml (pull_request) Successful in 2m25s
ansible / lint (pull_request) Successful in 4m3s
ansible / collection-test (pull_request) Successful in 4m12s
943d31bf08
自动切换后主库安全落到 pve1 不会触发无主/多主规则;2026-09-30 的切换一天无人察觉。

Co-Authored-By: Claude Opus 5.5 <[email protected]>
panxiao81 merged commit 2c7dd224cf into main 2026-10-01 16:33:05 +00:00
panxiao81 deleted branch feat/shared-pg-sql-metrics 2026-10-01 16:33:06 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: panxiao81/homelab-infra#173