Копирование метрик


В платформе astra-monitoring метрики хранятся в базе данных VictoriaMetrics, которая предлагает несколько способов резервного копирования данных. Рассморим следующие варианты:

Резервное копирование для Docker Compose

Подготовка

  1. Убедитесь, что у вас есть доступ к хосту, где работает VictoriaMetrics

  2. Проверьте расположение данных VictoriaMetrics в вашем docker-compose.yml:

    docker-compose.yml
    services:
      vmetrics:
        image: registry.astralinux.ru/am/victoria-metrics
        volumes:
        - ./victoria-metrics/data:/victoria-metrics-data
    

    Запомните путь ./victoria-metrics/data - это место хранения данных на хосте.

    Примечание

    Данный путь может отличаться в зависимости от установки, администратор может использовать любой удобный способ хранения данных.

  3. Установите утилиту vmbackup, если её нет:

    shell
    docker pull victoriametrics/vmbackup
    

Полный бэкап

  1. Создайте директорию для бэкапов:

    shell
    mkdir -p ~/backup/victoriametrics/full
    

    Важно

    Остановите запись новых данных (если возможно) или выполняйте бэкап в период низкой нагрузки.

  2. Выполните полный бэкап:

    shell
    docker run --rm -v ./victoria-metrics/data:/victoria-metrics-data \
      -v ~/backup/victoriametrics/full:/backup \
      victoriametrics/vmbackup \
      -storageDataPath=/victoria-metrics-data \
      -dst=fs:///backup/$(date +%Y-%m-%d_%H-%M-%S)_full
    
  3. Проверьте созданный бэкап:

    shell
    ls -lh ~/backup/victoriametrics/full/
    

Инкрементальный бэкап

  1. Создайте директорию для инкрементальных бэкапов:

    shell
    mkdir -p ~/backup/victoriametrics/incremental
    
  2. Выполните инкрементальный бэкап:

    shell
    docker run --rm -v ./victoria-metrics/data:/victoria-metrics-data \
      -v ~/backup/victoriametrics/incremental:/backup \
      victoriametrics/vmbackup \
      -storageDataPath=/victoria-metrics-data \
      -dst=fs:///backup/$(date +%Y-%m-%d_%H-%M-%S)_incremental \
      -snapshotNameURL=fs:///backup/latest_snapshot
    
  3. Обновите ссылку на последний снапшот:

    shell
    docker run --rm -v ~/backup/victoriametrics/incremental:/backup \
      victoriametrics/vmbackup \
      -snapshot.createURL=fs:///backup/latest_snapshot \
      -snapshotOriginURL=fs:///backup/$(ls -t /backup/victoriametrics/incremental | head -n1)
    

Восстановление

  1. Остановите VictoriaMetrics:

    shell
    docker-compose down vmetrics 
    
  2. Очистите данные (если нужно):

    shell
    rm -rf ./victoria-metrics/data/*
    
  3. Восстановите из бэкапа:

    shell
    docker run --rm -v /path/to/data:/victoria-metrics-data \
      -v /backup/victoriametrics/full/2023-01-01_full:/backup \
      victoriametrics/vmrestore \
      -src=fs:///backup \
      -storageDataPath=/victoria-metrics-data
    
  4. Запустите VictoriaMetrics:

    shell
    docker-compose up -d
    

Резервное копирование для Helm

Подготовка

  1. Убедитесь, что у вас есть доступ к кластеру Kubernetes

  2. Проверьте конфигурацию вашего Helm релиза:

    shell
    helm get values astra-monitoring -n monitoring
    

    Используйте имя своего релиз в место astra-monitoring и укажите namespace, к примеру monitoring

    Обратите внимание на persistence.storageClass и persistence.size

  3. Установите утилиты vmbackup и kubectl:

    shell
    curl -LO https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.78.0/vmutils-linux-amd64-v1.78.0.tar.gz
    tar xvf vmutils-linux-amd64-v1.78.0.tar.gz
    

Полный бэкап

  1. Создайте PVC для хранения бэкапов:

    vmectrics-backup-pvc.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: vm-backup-pvc
      namespace: monitoring
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 100Gi
      storageClassName: standard
    

    Примените:

    shell
    kubectl apply -f vmectrics-backup-pvc.yaml -n monitoring
    
  2. Создайте Job для полного бэкапа:

    vmectrics-backup-job.yaml
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: vm-full-backup
      namespace: monitoring
    spec:
      template:
        spec:
          containers:
          - name: vmbackup
            image: victoriametrics/vmbackup
            command:
              - "/bin/sh"
              - "-c"
              - |
                /vmbackup-prod \
                -storageDataPath=/storage \
                -dst=fs:///backup/$(date +%Y-%m-%d_%H-%M-%S)_full
            volumeMounts:
              - name: storage
                mountPath: /storage
              - name: backup
                mountPath: /backup
          volumes:
            - name: storage
              persistentVolumeClaim:
                claimName: vm-storage-pvc # Замените на ваш PVC VictoriaMetrics
            - name: backup
              persistentVolumeClaim:
                claimName: vm-backup-pvc
          restartPolicy: Never
      backoffLimit: 1
    

    Примените:

    shell
    kubectl apply -f vm-full-backup-job.yaml -n monitoring
    

    Проверьте статус Job:

    shell
    kubectl get jobs -n monitoring
    kubectl logs job/vm-full-backup -n monitoring
    

Инкрементальный бэкап

  1. Создайте ConfigMap для хранения информации о последнем снапшоте:

    shell
    kubectl create configmap vm-snapshot --from-literal=latest="" -n monitoring
    
  2. Создайте CronJob для инкрементальных бэкапов:

    vm-incremental-backup-cronjob.yaml
    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: vm-incremental-backup
      namespace: monitoring
    spec:
      schedule: "0 * * * *" # Каждый час
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: vmbackup
                image: victoriametrics/vmbackup
                command:
                  - "/bin/sh"
                  - "-c"
                  - |
                    /vmbackup-prod \
                    -storageDataPath=/storage \
                    -dst=fs:///backup/$(date +%Y-%m-%d_%H-%M-%S)_incremental \
                    -snapshotNameURL=fs:///backup/latest_snapshot
                    && \
                    /vmbackup-prod \
                    -snapshot.createURL=fs:///backup/latest_snapshot \
                    -snapshotOriginURL=fs:///backup/$(ls -t /backup | grep incremental | head -n1)
                volumeMounts:
                  - name: storage
                    mountPath: /storage
                  - name: backup
                    mountPath: /backup
              volumes:
                - name: storage
                  persistentVolumeClaim:
                    claimName: vm-storage-pvc
                - name: backup
                  persistentVolumeClaim:
                    claimName: vm-backup-pvc
              restartPolicy: Never
          backoffLimit: 1
    

    Примените:

    shell
    kubectl apply -f vm-incremental-backup-cronjob.yaml -n monitoring
    

Восстановление

  1. Масштабируйте VictoriaMetrics до 0 реплик:

    shell
    kubectl scale statefulset victoria-metrics -n monitoring --replicas=0
    
  2. Удалите текущие данные:

    shell
    kubectl delete pvc vm-storage-pvc -n monitoring
    
  3. Создайте новый PVC:

    vm-storage-pvc.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: vm-storage-pvc
      namespace: monitoring
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 100Gi
      storageClassName: standard
    

    Примените:

    shell
    kubectl apply -f vm-storage-pvc.yaml -n monitoring
    
  4. Запустите Job для восстановления:

    vm-restore-job.yaml
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: vm-restore
      namespace: monitoring
    spec:
      template:
        spec:
          containers:
          - name: vmrestore
            image: victoriametrics/vmrestore
            command:
              - "/vmrestore-prod"
              - "-src=fs:///backup/2025-01-01_full" # Укажите нужный бэкап
              - "-storageDataPath=/storage"
            volumeMounts:
              - name: storage
                mountPath: /storage
              - name: backup
                mountPath: /backup
          volumes:
            - name: storage
              persistentVolumeClaim:
                claimName: vm-storage-pvc
            - name: backup
              persistentVolumeClaim:
                claimName: vm-backup-pvc
          restartPolicy: Never
      backoffLimit: 1
    

    Примените:

    shell
    kubectl apply -f vm-restore-job.yaml -n monitoring
    
  5. Проверьте логи восстановления:

    shell
    kubectl logs job/vm-restore -n monitoring
    
  6. Масштабируйте VictoriaMetrics обратно:

    shell
    kubectl scale statefulset victoria-metrics -n monitoring --replicas=3