Files
homelab-infra/infrastructure/shared-data-monitoring

共享数据服务维护监控

为 laptop、etcd-pve1(10.60.0.20)、etcd-pve2(10.60.0.21)补齐备份、磁盘证书、 续签检查与 dev SQL 的指标。复用现有 VictoriaMetrics/Alertmanager;不部署新监控栈。 实现由 PR #166 发布。

2026-09-27:三个主机端已部署并验证,Ansible 重跑均 changed=0;vmagent Pod 能访问三个 内网 :9109/metrics。抓取声明和八条规则尚待 PR 合并,不能视为已启用告警。

采集和阈值

每分钟执行 homelab-data-collect.service,读取明确清单并原子替换 /var/lib/homelab-data-monitoring/health.prom。每项检查失败输出零值及 check_success=0, 不沿用旧成功值;完整采集时间用于发现任务停止或文件缺失。端点不暴露密码、token、私钥。

项目 证据 告警
etcd 快照 每成员已完成 .db 文件 mtime,排除 .partial 超过 36 小时 warning
PG full 备份 仓库本地 pgBackRest JSON 中无错误 full 的完成时间 超过 36 小时 warning
证书 显式清单包含 server/peer/admin/gateway/PG etcd client/CA;取完整 PEM 链最早到期时间 不足 10 天 warning;不足 3 天或无法读取 critical
续签检查 laptop 两个 renew service 的成功退出时间及 timer active 失败、停用或超过 36 小时 warning
dev 本地 socket、pgdev peer 身份,只读 SQL 检查非 recovery 且非只读 连续异常 3 分钟 warning
采集链路 exporter up、单项检查、textfile 错误、完整采集时间 失败或心跳超过 3 分钟后持续 3 分钟 warning

证书在不足 14 天时由原自动续签任务处理,10 天阈值给重试留出余量;critical 不重复触发 warning。 36 小时适用于现有每日快照/full/续签检查计划。dev 未新增备份,异地备份仍后置。

node_exporter 固定为现有监控所用的 1.9.1,并校验官方 SHA256;保留上游 LICENSE。 仅启用 textfile,使用 DynamicUser,绑定各主机内网地址的 9109,与现有 9100 不冲突。 采集程序以 root 运行,以便读取快照元数据和切换为 pgdev/pgbackup;systemd 限制文件系统写入 到 textfile 目录,限制执行时间与内存。无需 Bao 登录;数据库和 etcd 不因部署监控重启。 采集并非常驻进程;laptop 上 exporter 当前 MemoryCurrent 约 2.6 MiB,仅作现场开销参考。

部署和验证

在 PR 分支或合并后的完整 checkout 中执行:

cd infrastructure/shared-data-monitoring/ansible
ansible-playbook site.yml

本机需要免交互 sudo,远程使用已有 root SSH;配置不包含秘密。当前实现仅支持 Linux amd64, 依赖现有 Python 3、OpenSSL、systemd、PG 客户端和 pgBackRest。下载 exporter 需要访问 GitHub。

只读查看结果:

curl --fail http://192.168.10.127:9109/metrics
sudo systemctl status homelab-data-collect.timer homelab-data-exporter.service
sudo journalctl -u homelab-data-collect.service --since '2 hours ago'

主机端 check_success 应全为 1、dev_sql_ready=1,node_textfile_scrape_error=0。 合并后检查 up{job="shared-data-maintenance"} 三个目标及 shared-data-maintenance 规则组。 Kubernetes 资源由现有 observability Kustomization 纳管;主机端由此 Ansible 独立维护。

2026-09-27 验证:6 项采集测试、12 个新增 promtool 场景及既有规则回归通过;Ansible lint 零失败零告警;Kustomize 渲染通过;三主机实际采集和 vmagent 网络路径通过。未停止业务来测试告警。

故障入口与边界

  • 采集停止:先查 exporter 和 collect timer/service,再看 .prom 的 collection timestamp。
  • 备份陈旧:etcd 查 homelab-etcd-snapshot;PG 仓库查 homelab-postgresql-backup。 不以 touch 文件消除告警。快照年龄依赖完成文件 mtime,手工复制会改变证据,不能冒充新备份。
  • 证书或续签异常:查 laptop 的 homelab-etcd-renew / homelab-postgresql-renew; 修复 Bao/SPIRE/网络或受限身份后重跑原续签入口,不删除现有证书或重置数据库。
  • dev SQL 失败:查 homelab-postgresql-dev、磁盘与 socket,再核对本地 peer 认证。

备份年龄不能证明恢复能力或 WAL 连续性;定期隔离恢复演练仍必要。证书指标读取磁盘文件, 不证明运行进程已重载该证书。dev 检查不验证外部 DNS/TLS 路径、不执行写入。 SQL 级 exporter、异地备份及应用迁移不在本次范围。

跨服务状态见 共享 PG wiki。