Prometheus 容器重启后数据丢失如何配置持久化存储

文章导读
Prometheus 容器重启后数据丢失,最直接的解决办法是在启动容器时将数据目录挂载到宿主机,这样即使容器被删除,数据依然保留在宿主机上。
📋 目录
  1. Docker 命令速用版
  2. Kubernetes 持久化配置示例
  3. 为什么会这样
  4. 分步处理(Docker 环境)
  5. 怎么验证是否生效
  6. 常见坑
  7. 参考来源
A A

Prometheus 容器重启后数据丢失,最直接的解决办法是在启动容器时将数据目录挂载到宿主机,这样即使容器被删除,数据依然保留在宿主机上。

先说结论:必须配置 volume 挂载,否则容器重建即丢失所有监控历史。

  • 适合:Docker 及 Kubernetes 部署 Prometheus 的场景
  • 先准备:确认宿主机磁盘空间及目录权限(K8s 需确认 StorageClass)
  • 验收:重启容器或删除 Pod 后检查数据目录文件大小是否变化

Docker 命令速用版

docker run -d `--name` prometheus -p 9090:9090 -v /opt/prometheus/data:/prometheus prom/prometheus

Kubernetes 持久化配置示例

在 K8s 环境中,需通过 PVC 绑定存储卷,并在 Deployment 中挂载至 /prometheus 路径。

1. 创建 PVC 配置(prometheus-pvc.yaml):

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: prometheus-data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

2. 部署时挂载 volume(Deployment 片段):

volumes:
  - name: data
    persistentVolumeClaim:
      claimName: prometheus-data
containers:
  - name: prometheus
    volumeMounts:
      - name: data
        mountPath: /prometheus

为什么会这样

容器默认的文件系统是临时的。Prometheus 内部默认将时序数据写在容器内的/prometheus 目录,一旦容器停止并被移除,这部分文件系统随之消失。挂载卷(Volume)的作用是将宿主机的目录映射到容器内部,让数据落地到宿主机磁盘。

Prometheus 容器重启后数据丢失如何配置持久化存储

分步处理(Docker 环境)

1. 创建宿主机目录

mkdir -p /opt/prometheus/data

2. 调整权限(重要)

官方镜像默认使用 65534 用户运行,需授权该用户写入宿主机目录:

chown -R 65534:65534 /opt/prometheus/data

3. 启动容器并挂载

使用 -v 参数将宿主机目录映射到容器内的/prometheus 路径。

怎么验证是否生效

1. 写入测试:观察 Prometheus 界面右下角 Status 是否为 Active。

Prometheus 容器重启后数据丢失如何配置持久化存储

2. 重启测试:执行 docker restart prometheus(K8s 可删除 Pod),再次查看界面数据是否连续。

3. 文件检查:在宿主机执行 ls -lh /opt/prometheus/data,确认有 block 文件生成且大小随时间增长。

常见坑

1. 权限拒绝:如果不修改宿主机目录所有者,容器启动会报 Permission denied。

2. 磁盘空间:监控数据会持续增长,需设置 `--storage`.tsdb.retention.time 限制保留时间,默认是 15d。

3. 路径混淆:挂载目标必须是容器内的/prometheus,而不是配置文件目录。

参考来源

  • Prometheus Official Documentation, Storage, https://prometheus.io/docs/prometheus/latest/storage/
  • Docker Official Documentation, Use volumes, https://docs.docker.com/storage/volumes/