备份、恢复与故障排查
VictoriaMetrics 的生产可靠性取决于数据生命周期管理,而不只是 Pod 副本数。保留期控制在线数据量,备份应覆盖更长的恢复窗口,恢复演练确认备份真的可用,监控则应在写入积压或容量耗尽前报警。
1. 数据生命周期与容量
容量规划至少应记录以下变量:每日样本写入量、活跃序列数、平均标签数、保留期、压缩后磁盘增量、查询窗口、可用 IOPS 和故障恢复空间。不要以单次压缩比外推全年容量;业务发布、标签变更和短生命周期工作负载会让基数快速变化。
建议为磁盘设置两级阈值:预警阈值用于扩容评审,严重阈值用于限制高成本查询、降低非核心采样或紧急扩容。不要等磁盘写满才处理,时序库在空间不足时可能同时影响写入、合并和查询。
# 查看单机或 vmstorage 的数据卷使用率,持续观察增长速率而非只看当前值。
kubectl -n monitoring exec vmstorage-0 -- df -h /storage
# 从 Prometheus 或 Grafana 查询活跃序列的近似规模,作为基数趋势参考。
curl -fsS 'http://victoriametrics.monitoring.svc:8428/api/v1/status/tsdb'
2. 备份策略
单机版可使用 vmbackup 将快照写入 S3、兼容 S3 的对象存储或其他受支持后端;集群版应按组件和官方版本文档选择相应备份方法。对象存储的桶策略、版本控制、加密、跨区域复制和访问密钥同样属于备份方案的一部分。
# 示例:从能访问数据目录和对象存储的受控维护 Job 执行备份。
# 版本必须与 VictoriaMetrics 服务端兼容,且访问密钥通过 Secret 注入而不是命令行明文传入。
vmbackup \
-storageDataPath=/var/lib/victoria-metrics-data \
-dst=s3://metrics-backup/production/vm/$(date +%F)
# 备份完成后列出对象前缀,确认新快照存在并记录备份作业日志。
aws s3 ls s3://metrics-backup/production/vm/
备份频率由 RPO 决定。例如 RPO 为 24 小时,至少每天一次并且必须对失败报警;若接受更小的数据丢失窗口,就应相应提高频率。保留策略还要覆盖误删除、错误配置和勒索风险,不能只保留一个可被同步删除的副本。
3. 恢复演练
恢复目标是把数据恢复到隔离的新目录或新 PVC,再由临时实例验证查询;不要在原生产数据目录直接执行恢复。恢复演练至少验证备份日期、关键指标、常用 Grafana 面板和告警规则。
# 将备份恢复到一个全新的空目录;目标目录已存在数据会导致恢复结果不可控。
vmrestore \
-src=s3://metrics-backup/production/vm/2026-07-31 \
-storageDataPath=/restore/victoria-metrics
# 用恢复目录启动隔离实例后,查询关键指标验证时间范围和标签完整性。
curl -fsSG http://restore-vm.monitoring.svc:8428/api/v1/query \
--data-urlencode 'query=up{cluster="production-shanghai"}'
恢复演练应定期进行并记录实际耗时。恢复速度决定 RTO,备份的对象数量、跨地域读取带宽、磁盘性能和后续索引加载都会影响这个时间。
4. 日常巡检与告警
| 对象 | 必查信号 | 风险 |
|---|---|---|
| Prometheus / vmagent | Remote Write pending、重试、丢弃、WAL/缓冲盘使用率 | 后端异常造成样本延迟或丢失 |
| VictoriaMetrics / vminsert | 写入错误、请求延迟、CPU、内存 | 写入瓶颈或资源耗尽 |
| vmselect | 查询错误、慢查询、内存和返回数据量 | 面板超时、查询放大或异常用户请求 |
| vmstorage / 单机数据卷 | 磁盘使用率、IO 延迟、重启、合并异常 | 写入失败、查询损坏或恢复窗口扩大 |
| 备份任务 | 最近成功时间、耗时、对象大小、恢复演练结果 | 备份失效但长期未发现 |
告警表达式应按部署版本和实际暴露的指标名称编写,升级前先检查 /metrics。不要复制不匹配版本的告警规则,也不要只监控 HTTP 存活;存活端点正常时,写入队列、磁盘或对象存储备份仍可能已经故障。
5. 故障处理顺序
Grafana 无数据
-> 查询时间范围、数据源 URL 和租户路径
-> vmselect 或单机查询接口是否可用
-> vminsert / 单机写入是否报错
-> Prometheus 或 vmagent 是否积压
-> 抓取目标、Relabel 与标签是否发生变更
| 现象 | 优先处置 |
|---|---|
| 写入延迟持续升高 | 检查后端磁盘、CPU、网络、序列基数和上游队列;不要立刻无限增大队列 |
| 查询超时 | 缩小时间范围和标签选择器,识别高基数聚合,再检查 vmselect 内存与 vmstorage 延迟 |
| 数据卷快速增长 | 对比新增指标与标签,排查短生命周期 Job、错误的 labelmap 和重复采集 |
| 单节点不可用 | 先隔离故障卷和节点,按已演练流程恢复到新卷;不要在原目录反复重启并覆盖证据 |
| 集群单个 vmstorage 异常 | 依据副本、复制和恢复设计处理,确认数据路径与健康分片后再替换节点 |
验收清单
- 保留期、容量预测、磁盘阈值和扩容责任已明确。
- 备份作业、对象存储权限和失败告警已上线。
- 在隔离环境完成过恢复演练,记录了实际 RPO 与 RTO。
- 写入、查询、存储和备份链路均有可观测指标与处理预案。