You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从原有Prometheus容器遗留数据中恢复历史时序数据?

Prometheus容器数据路径变更后历史数据恢复方案

根因说明

Prometheus 官方镜像的默认数据存储路径参数 --storage.tsdb.path 取值为 /prometheus/data。你此前的运行配置中应该显式指定了该参数值为 /prometheus,因此历史数据直接存放在宿主机挂载的 /var/lib/docker/prometheus 目录下。你修改 docker-compose.yml 时重写了 command 配置,遗漏了原有路径参数,导致Prometheus按默认路径生成了/var/lib/docker/prometheus/data子目录存放新数据,无法识别上层目录的历史数据。

你修改后新增的配置如下:

command: 
   --storage.tsdb.retention.time=90d 
   --config.file=/etc/prometheus/prometheus.yml

恢复步骤

  • 第一步:先停止运行中的Prometheus容器,避免写入操作干扰数据恢复:
    docker-compose stop prometheus
    
  • 第二步:备份当前生成的新数据目录,避免误操作丢失新产生的指标:
    mv /var/lib/docker/prometheus/data /var/lib/docker/prometheus/data_new_bak
    
  • 第三步:二选一完成适配即可:
    1. 配置适配方案(优先选择,无需改动数据文件)
      在docker-compose.yml的command段补充路径参数,和原有配置保持一致:
    command: 
       --storage.tsdb.retention.time=90d 
       --config.file=/etc/prometheus/prometheus.yml
       --storage.tsdb.path=/prometheus
    
    改完直接启动容器即可完成恢复。
    2. 数据迁移方案(不改配置,适配默认路径)
    新建data目录,将所有历史数据移动到该目录下,同时修正目录权限(Prometheus默认运行用户uid为65534):
    mkdir /var/lib/docker/prometheus/data
    # 移动历史数据,注意排除刚才备份的data_new_bak目录
    mv /var/lib/docker/prometheus/{0*,wal,chunks_head,meta.json} /var/lib/docker/prometheus/data/
    chown -R 65534:65534 /var/lib/docker/prometheus/data
    
  • 第四步:启动容器验证
    docker-compose up -d prometheus
    
    进入Prometheus UI查询超过重启时间点的历史指标,能正常查询即恢复成功,确认无误后可删除之前备份的data_new_bak目录。

此前拷贝失败的常见原因

你之前直接拷贝数据未生效,大概率是以下原因之一:

  • 拷贝时未停止Prometheus容器,运行状态下的TSDB数据处于锁定状态,无法正常读取写入
  • 拷贝后未修正目录权限,Prometheus无权限读取你移入的历史文件
  • 目录层级拷贝错误,导致Prometheus无法识别数据结构

内容的提问来源于stack exchange,提问作者Ankit Sahu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:54:03