Подробный гайд: Резервное копирование Prometheus и Grafana

Полный гайд по бэкапу Prometheus и Grafana: снапшоты, автоматизация, восстановление и безопасность для production-инфраструктуры.

2026.04.19                  


Подробный гайд: Резервное копирование Prometheus и GrafanaПодробный гайд: Резервное копирование Prometheus и Grafana Автор: А. Денис Сергеевич (ServerMon.ru) | Дата: Апрель 2026

Данный гайд охватывает production-подход к бэкапам метрик (Prometheus) и визуализаций/конфигураций (Grafana). Включены нативные методы, автоматизация, восстановление и лучшие практики безопасности.


1. Prometheus: бэкап и восстановление

1.1. Где хранятся данные

По умолчанию (Linux-пакеты):

/var/lib/prometheus/

Внутри:

  • data/ — блоки TSDB (чанки по 2 часа, индексы, WAL)
  • snapshots/ — создаются вручную
  • rules/ — файлы правил алертинга/записи (если используются)

Важно:

  • Prometheus не поддерживает горячую остановку без потери последних ~2 часов данных из WAL. Для production рекомендуется remote storage или регулярные snapshot'ы + внешнее хранилище.

1.2. Нативный snapshot (promtool)

Создаёт согласованный снимок текущих блоков TSDB без остановки сервиса.

sudo -u prometheus promtool tsdb snapshot /var/lib/prometheus/

Результат:

/var/lib/prometheus/snapshots/20260419T143022Z/

Ограничения:

  • Не бэкапит WAL (последние ~2ч)
  • Не заменяет долгосрочное хранение
  • Рекомендуется только для аварийного снапшота или миграции

1.3. Production-подход: Remote Storage + Object Storage

Официально рекомендованный путь с 2024 года:

Инструмент Механизм Хранилище
Thanos Sidecar Загружает блоки Prometheus в S3 S3/MinIO/GCS
VictoriaMetrics Встроенный бэкап/восстановление S3/FS/NFS
Grafana Mimir Блоки + индексы в объектном хранилище S3-compatible

Пример интеграции Thanos Sidecar (кратко):

# /etc/prometheus/prometheus.yml
remote_write:
  - url: "http://thanos-sidecar:10901/api/v1/receive"

Thanos автоматически синхронизирует блоки в S3 при --objstore.config-file.

1.4. Автоматизация бэкапа (скрипт + cron)

Если remote storage недоступен, используйте скрипт с promtool + rclone/aws s3:

#!/usr/bin/env bash
set -euo pipefail

BACKUP_DIR="/var/backups/prometheus"
SNAPSHOT_DIR="/var/lib/prometheus/snapshots"
S3_BUCKET="s3://your-prometheus-backups"
RETENTION_DAYS=30

mkdir -p "$BACKUP_DIR"
TIMESTAMP=$(date -u +"%Y%m%dT%H%M%SZ")

# 1. Создаём снапшот
sudo -u prometheus promtool tsdb snapshot /var/lib/prometheus/

# 2. Архивируем последний снапшот
LATEST_SNAPSHOT=$(ls -td "$SNAPSHOT_DIR"/*/ | head -n1)
tar -czf "$BACKUP_DIR/prometheus_$TIMESTAMP.tar.gz" -C "$(dirname "$LATEST_SNAPSHOT")" "$(basename "$LATEST_SNAPSHOT")"

# 3. Отправляем в S3
rclone copy "$BACKUP_DIR/prometheus_$TIMESTAMP.tar.gz" "$S3_BUCKET" --s3-storage-class STANDARD_IA --quiet

# 4. Чистка локальных архивов
find "$BACKUP_DIR" -name "prometheus_*.tar.gz" -mtime +$RETENTION_DAYS -delete

# 5. Чистка старых снапшотов (Prometheus не удаляет их сам)
find "$SNAPSHOT_DIR" -maxdepth 1 -type d -mtime +1 -exec rm -rf {} +

Добавьте в crontab -e:

0 2 * * * /usr/local/bin/prometheus-backup.sh >> /var/log/prometheus-backup.log 2>&1

1.5. Восстановление Prometheus

  1. Остановите сервис: sudo systemctl stop prometheus
  2. Очистите /var/lib/prometheus/data/ (или переместите в data.old/)

3. Распакуйте архив в data/:

   sudo -u prometheus tar -xzf prometheus_20260419T020000Z.tar.gz -C /var/lib/prometheus/data/
  1. Запустите: sudo systemctl start prometheus
  2. Проверьте логи: journalctl -u prometheus -f --since "5 min ago"

Если используется Thanos/VictoriaMetrics, восстановление сводится к перезапуску с указанием того же бакета. Данные подтянутся автоматически.


2. Grafana: бэкап и восстановление

2.1. Что нужно бэкапить

Компонент Путь/Тип Примечание
База данных SQLite: /var/lib/grafana/grafana.db
PostgreSQL/MySQL: внешний сервер
Дашборды, пользователи, алерты, настройки
Конфигурация /etc/grafana/grafana.ini Секреты, SMTP, LDAP, плагины
Плагины /var/lib/grafana/plugins/ Загруженные сторонние плагины
Файловые дашборды /etc/grafana/provisioning/ Если используется provisioning

2.2. Бэкап базы данных

SQLite (по умолчанию)

Включите WAL-режим для горячего бэкапа (в grafana.ini):

[database]
wal = true

Скрипт бэкапа:

sudo -u grafana sqlite3 /var/lib/grafana/grafana.db ".backup '/var/backups/grafana/grafana_$(date -u +%Y%m%dT%H%M%SZ).db'"

PostgreSQL / MySQL

# PostgreSQL
pg_dump -U grafana -h localhost grafana | gzip > /var/backups/grafana/grafana_$(date -u +%Y%m%d).sql.gz

# MySQL
mysqldump -u grafana -p grafana | gzip > /var/backups/grafana/grafana_$(date -u +%Y%m%d).sql.gz

2.3. Бэкап через API / grafana-backup-tool

Официального CLI для полного бэкапа нет.

Рекомендуется утилита grafana-backup-tool - github.com/ysde/grafana-backup-tool:

pip3 install grafana-backup-tool

Конфиг /etc/grafana-backup/grafana_backup.ini:

[grafana]
url = http://localhost:3000
token = glsa_ВАШ_ТОКЕН_С_ПРАВАМИ_ADMIN
verify_ssl = True

[storage]
storage_type = local
local_storage_dir = /var/backups/grafana-api

Запуск:

grafana-backup save

Поддерживает S3, Azure, GCS, шифрование, ротацию.

2.4. Полный скрипт автоматизации (SQLite + файлы + API)

#!/usr/bin/env bash
set -euo pipefail

BACKUP_DIR="/var/backups/grafana"
GRAFANA_DB="/var/lib/grafana/grafana.db"
GRAFANA_CONF="/etc/grafana/grafana.ini"
GRAFANA_PLUGINS="/var/lib/grafana/plugins"
TIMESTAMP=$(date -u +"%Y%m%dT%H%M%SZ")

mkdir -p "$BACKUP_DIR"

# 1. БД (SQLite)
sqlite3 "$GRAFANA_DB" ".backup '$BACKUP_DIR/grafana_db_$TIMESTAMP.db'"

# 2. Конфиги и плагины
tar -czf "$BACKUP_DIR/grafana_files_$TIMESTAMP.tar.gz" \
  -C / etc/grafana/grafana.ini \
  -C /var/lib/grafana plugins/ provisioning/ 2>/dev/null || true

# 3. API-бэкап (если установлен grafana-backup-tool)
grafana-backup save --output-dir "$BACKUP_DIR"

# 4. Отправка в S3
rclone sync "$BACKUP_DIR" s3://your-grafana-backups/grafana_$(date -u +%Y) --s3-storage-class STANDARD_IA --delete-after --quiet

# 5. Ротация
find "$BACKUP_DIR" -name "*.db" -mtime +14 -delete
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete

Cron:

30 2 * * * /usr/local/bin/grafana-backup.sh >> /var/log/grafana-backup.log 2>&1

2.5. Восстановление Grafana

  1. Остановите: sudo systemctl stop grafana-server

2. Восстановите БД:

   sudo cp /var/backups/grafana/grafana_db_20260419T023000Z.db /var/lib/grafana/grafana.db
   sudo chown grafana:grafana /var/lib/grafana/grafana.db

3. Распакуйте файлы:

   sudo tar -xzf grafana_files_*.tar.gz -C /
   sudo chown -R grafana:grafana /var/lib/grafana/plugins/
  1. Запустите: sudo systemctl start grafana-server

5. Если использовался grafana-backup-tool:

   grafana-backup restore --input-dir /var/backups/grafana-api

Токен для бэкапа должен иметь роль Admin или Editor с правами Dashboard:Read, Datasource:Read, User:Read, API Key:Create.


3. Общие лучшие практики (2026)

Практика Рекомендация
3-2-1 3 копии, 2 типа носителей, 1 вне площадки (S3/MinIO/холодное хранилище)
Шифрование rclone crypt, gpg -c, или S3 SSE-KMS. Никогда не храните бэкапы в открытом виде
Ротация Daily 7d → Weekly 4w → Monthly 12m. Используйте rclone или borg/restic
Мониторинг бэкапов Экспортируйте статус в Prometheus: node_cron_job_status, grafana_backup_last_success, prometheus_backup_size_bytes. Алерты на >24h без успеха
Тестирование Ежеквартально разворачивайте бэкап на staging. Проверяйте целостность TSDB (promtool check data) и загрузку дашбордов
Безопасность Отдельный IAM-пользователь для бэкапов, policy s3:PutObject + s3:GetObject, без s3:DeleteObject (используйте lifecycle rules)
Kubernetes Используйте Velero для бэкапа PVC + prometheus-operator/kube-prometheus-stack встроенные снапшоты. Для Grafana Helm-чарты поддерживают backup.enabled

4. Быстрая шпаргалка

Задача Команда / Инструмент
Снапшот Prometheus promtool tsdb snapshot /var/lib/prometheus/
Проверка TSDB promtool check data /var/lib/prometheus/data/
Бэкап Grafana DB (SQLite) sqlite3 grafana.db ".backup backup.db"
Бэкап дашбордов API grafana-backup save
Отправка в S3 rclone sync /var/backups/ s3://bucket/path --delete-after
Восстановление Prometheus Заменить data/, systemctl restart prometheus
Восстановление Grafana Восстановить БД + файлы, systemctl restart grafana-server

Чек-лист перед запуском в production

  • [ ] Бэкапы запускаются автоматически и логируются
  • [ ] Размер бэкапов > 0, архивы открываются
  • [ ] S3-бакет с lifecycle policy и шифрованием
  • [ ] Тестовое восстановление выполнено на отдельном сервере
  • [ ] Алерт на отсутствие успешного бэкапа > 24ч
  • [ ] Документация по восстановлению доступна offline