- 数据库主机上按实例运行 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]>
21 lines
883 B
Bash
21 lines
883 B
Bash
#!/usr/bin/env bash
|
|
# 依赖 Python 3 + PyYAML,以及 PATH 中的 promtool(验证版本 3.5.0)。
|
|
set -euo pipefail
|
|
test_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|
check_dir="$(mktemp -d)"
|
|
trap 'rm -rf "$check_dir"' EXIT
|
|
python3 - "$test_dir/../rules" "$check_dir/rules.yaml" <<'PY'
|
|
import pathlib
|
|
import sys
|
|
import yaml
|
|
|
|
groups = []
|
|
for name in ("kubernetes-health", "host-health", "monitoring-delivery", "platform-controllers", "data-services", "openbao", "shared-data-maintenance", "shared-postgresql-sql"):
|
|
path = pathlib.Path(sys.argv[1]) / f"{name}.yaml"
|
|
groups.extend(yaml.safe_load(path.read_text())["spec"]["groups"])
|
|
pathlib.Path(sys.argv[2]).write_text(yaml.safe_dump({"groups": groups}, allow_unicode=True))
|
|
PY
|
|
cp "$test_dir/"*.test.yaml "$check_dir/"
|
|
promtool check rules "$check_dir/rules.yaml"
|
|
promtool test rules "$check_dir/"*.test.yaml
|