补齐 OpenBao 内部健康与本地快照监控
yaml / yaml (pull_request) Successful in 49s
ansible / collection-test (pull_request) Successful in 2m19s
ansible / lint (pull_request) Successful in 3m45s

This commit is contained in:
2026-09-25 20:56:09 +00:00
parent 834f654941
commit 0309d03428
14 changed files with 525 additions and 44 deletions
+57
View File
@@ -0,0 +1,57 @@
# OpenBao 监控运维
受鉴权 `/v1/sys/metrics` 通过 vmagent 内的 Bao Agent 使用 Kubernetes 身份采集。
`metrics` policy 仅允许读取该路径;policy 和 role 由 `terraform/monitoring.tf` 管理。
Bao VM 的 Ubuntu `prometheus-node-exporter` 软件包监听 `192.168.10.8:9100`,
由 `ansible/roles/openbao_monitoring` 管理。仅供内网监控,不配置公共入口;
现场 UFW 未启用,故当前边界是 LAN 地址绑定,并非逐来源访问控制。
标准主机指标复用 `job=node-exporter` 的主机告警,额外标记 `node=bao1`。
首次部署前需要 bootstrap 已创建 `/etc/openbao/snapshot.token` 和快照目录。
只更新监控与快照运行文件(不会重启 Bao 或轮换 token):
```bash
cd ansible
ansible-playbook monitor-openbao.yml --check
ansible-playbook monitor-openbao.yml
# 在 bao1 上执行一次真实快照,建立成功基线:
sudo systemctl start openbao-snapshot.service
```
快照脚本在 `/var/lib/prometheus/node-exporter/` 原子更新两个 `.prom` 文件:
- `openbao_snapshot_result.prom`:最近一次运行结果(0/1)及完成时间。
- `openbao_snapshot_success.prom`:最后一次成功生成完整本地快照的时间。
失败保留上次成功时间,先完成快照再删除超出保留数量的文件。
指标文件 root 写、exporter 只读;不包含 token、路径标签或快照内容。
首次成功前成功指标缺失,不用既有文件 mtime 冒充已验证成功。
Bao sealed 或 token 失效时,独立 exporter 仍能报告失败及超时。
`PrometheusRule/openbao` 包含:采集不可用(3 分钟)、内部健康异常(3 分钟)、
健康 gauge 缺失(5 分钟)、快照失败(5 分钟)、快照超过 36 小时或无成功记录
(持续 15 分钟)、快照监控缺失/损坏(5 分钟)。内部健康规则按当前**单节点**设计,
以后增加 standby 必须先调整 active 判定。快照指标仅证明本地任务成功,不能证明异地备份或可恢复性。
检查与恢复入口:
```bash
sudo systemctl status openbao-snapshot.timer openbao-snapshot.service prometheus-node-exporter
sudo journalctl -u openbao-snapshot.service -n 50 --no-pager
curl -fsS http://192.168.10.8:9100/metrics | grep '^openbao_snapshot_'
```
token 续期失败按[维护 runbook](https://git.ddupan.top/panxiao81/homelab-wiki/src/branch/main/guides/openbao-monitoring-maintenance.md)
受控轮换;不要通过反复重启 Bao 排障。回滚 exporter 或快照脚本无需重启 Bao。
回滚时同步撤回相应 ServiceMonitor/规则,否则缺指标告警会继续触发。
本地验证:
```bash
python3 -m unittest discover -s infrastructure/openbao/ansible/tests -v
# 需 PyYAML、Jinja2 和 promtool;已用 promtool 3.5.0 验证。
PATH=/path/to/promtool:$PATH bash platform/observability/metrics/tests/check-rules.sh
```
textfile 的原子发布方式遵循 [node_exporter 文档](https://github.com/prometheus/node_exporter#textfile-collector)。