怎么备份和恢复 Prometheus 的 TSDB 数据目录文件

文章导读
Prometheus TSDB 备份本质是文件系统级操作,核心是保护 data 目录下的块文件、WAL 日志和索引文件完整性。
📋 目录
  1. 前置检查与准备
  2. 备份操作方案
  3. 数据恢复步骤
  4. 验证与回滚
  5. 常见风险与注意
  6. 参考来源
A A

核心结论:Prometheus TSDB 备份本质是文件系统级操作,核心是保护 data 目录下的块文件、WAL 日志和索引文件完整性。

  • 适用场景:保留历史监控数据、迁移存储位置、灾难恢复
  • 前置检查:确认数据目录路径、Admin API 状态、磁盘空间
  • 风险控制:避免直接删除原数据目录,备份后校验文件大小,恢复前保留旧数据以便回滚

前置检查与准备

1. 确认数据目录路径

通过进程参数查看实际运行的数据目录位置:

ps -ef | grep prometheus | grep `--color`=never '`--storage`.tsdb.path'

若未指定,默认为启动目录下的 data/

2. 检查 Admin API 状态

若计划使用在线快照,需确认 Admin API 已启用。尝试访问接口:

curl -o /dev/null -s -w "%{http_code}" http://localhost:9090/api/v1/admin/tsdb/snapshot -X POST

若返回 404403,说明未开启,需在启动参数中添加 `--web`.enable-admin-api 并重启服务。

备份操作方案

方案一:离线文件拷贝(最稳妥)

适合有停机窗口的场景。停止服务可避免 WAL 文件不一致问题。

systemctl stop prometheus
# 校验源数据大小
du -sh /var/lib/prometheus/data
# 执行备份
cp -r /var/lib/prometheus/data /backup/prometheus_data_$(date +%F)
# 校验备份大小
du -sh /backup/prometheus_data_$(date +%F)
systemctl start prometheus

方案二:在线快照(无需停机)

适合无法停机的场景,但快照生成期间可能占用磁盘 IO,影响查询性能。

# 创建快照
curl -XPOST http://localhost:9090/api/v1/admin/tsdb/snapshot
# 验证快照是否生成成功 (检查返回状态码为 200)
# 快照默认存储在 data/snapshots 目录下
ls -lh /var/lib/prometheus/data/snapshots/

数据恢复步骤

1. 停止服务

systemctl stop prometheus

2. 保留原数据(回滚保障)

怎么备份和恢复 Prometheus 的 TSDB 数据目录文件

严禁直接使用 rm -rf 清空原目录,防止备份文件损坏导致数据永久丢失。

mv /var/lib/prometheus/data /var/lib/prometheus/data.bak_$(date +%F)

3. 恢复备份数据

cp -r /backup/prometheus_data_2024-01-01 /var/lib/prometheus/data

4. 修正文件权限

确认 Prometheus 运行用户,避免硬编码用户名为 prometheus:

ps -eo user,comm | grep prometheus
# 假设查询到的用户为 prometheus,执行授权
chown -R prometheus:prometheus /var/lib/prometheus/data

5. 启动服务

systemctl start prometheus

验证与回滚

1. 服务状态验证

查看日志确认无 TSDB 加载错误:

journalctl -u prometheus -f | grep -i "tsdb"

2. 数据完整性验证

访问 Web 界面 Status → TSDB,对比块文件数量。使用 PromQL 查询备份时间点前的数据:

up{job="prometheus"}

3. 紧急回滚

若恢复后服务异常或数据错误,停止服务并将备份目录移回:

systemctl stop prometheus
rm -rf /var/lib/prometheus/data
mv /var/lib/prometheus/data.bak_* /var/lib/prometheus/data
systemctl start prometheus

常见风险与注意

  • WAL 一致性:离线备份务必先停止服务,否则 WAL 日志可能导致恢复后数据损坏。
  • 磁盘 IO 影响:在线快照期间会产生大量磁盘读写,建议在业务低峰期执行。
  • 权限问题:恢复后若权限不足,Prometheus 无法写入新数据,表现为服务启动后很快停止或日志报错 Permission denied。
  • 数据保留策略:本地 TSDB 默认保留 15 天数据,备份无法恢复超过 retention 设置时间的数据,长期存储需配合 Thanos 等方案。

参考来源

  • Prometheus 官方文档 - TSDB Storage
  • Prometheus 官方文档 - Administrative HTTP API