Подробный гайд по резервному копированию Grafana

Полное руководство по резервному копированию Grafana: база данных, конфигурация, provisioning, плагины. Восстановление, автоматизация, лучшие практики.

2026.05.15                  


Подробный гайд по резервному копированию GrafanaПодробный гайд по резервному копированию Grafana

Важно:

Графана хранит данные в нескольких местах: база данных, конфигурационные файлы, provisioning-каталоги и установленные плагины. Полноценный бэкап должен охватывать все эти компоненты.


1. Что необходимо резервировать

Компонент Описание Типичный путь (Linux)
База данных Пользователи, дашборды, алерты, настройки, история /var/lib/grafana/grafana.db (SQLite) или внешняя БД
Конфигурация grafana.ini или переменные окружения /etc/grafana/grafana.ini
Provisioning YAML-файлы для дашбордов, источников данных, плагинов, алертов /etc/grafana/provisioning/
Плагины Сторонние/кастомные плагины, установленные вручную /var/lib/grafana/plugins/
Статические ресурсы Логотипы, темы, сертификаты (если менялись) /var/lib/grafana/ или кастомные пути

Пути могут отличаться в зависимости от способа установки, ОС и переменных GF_PATHS_DATA / GF_PATHS_CONFIG.


2. Резервное копирование базы данных

Способ зависит от используемой СУБД.

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

Безопасный способ (без остановки Grafana):
sqlite3 /var/lib/grafana/grafana.db ".backup '/tmp/grafana_db_backup.db'"

Альтернатива (с остановкой сервиса):
systemctl stop grafana-server
cp /var/lib/grafana/grafana.db /tmp/grafana_db_backup.db
systemctl start grafana-server

PostgreSQL

pg_dump -U grafana -d grafana -F c -f /tmp/grafana_pg_backup.dump
# Для восстановления:
# pg_restore -U grafana -d grafana -c /tmp/grafana_pg_backup.dump

MySQL / MariaDB

mysqldump -u grafana -p --single-transaction grafana > /tmp/grafana_mysql_backup.sql
# Для восстановления:
# mysql -u grafana -p grafana < /tmp/grafana_mysql_backup.sql

Для внешних БД используйте учетные данные из grafana.ini или переменных окружения GF_DATABASE_*.


3. Бэкап конфигурации, provisioning и плагинов

BACKUP_DIR="/opt/grafana-backup/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"

# Конфигурация
cp /etc/grafana/grafana.ini "$BACKUP_DIR/"

# Provisioning (дашборды, DS, алерты, уведомления)
cp -r /etc/grafana/provisioning "$BACKUP_DIR/"

# Плагины
cp -r /var/lib/grafana/plugins "$BACKUP_DIR/" 2>/dev/null || true

# Статические файлы (логотип, темы, сертификаты)
cp -r /var/lib/grafana/{png,svg,json,ca-certificates.crt} "$BACKUP_DIR/" 2>/dev/null || true

echo "Бэкап сохранён в: $BACKUP_DIR"

4. Особенности по способу развёртывания

Package / systemd (RPM/DEB)

  • Все пути по умолчанию: /etc/grafana/, /var/lib/grafana/
  • Управление сервисом: systemctl {start|stop|status} grafana-server
  • Логи: journalctl -u grafana-server -f

Docker / Docker Compose

Обычно используются тома:

volumes:
  - ./grafana-data:/var/lib/grafana
  - ./grafana-config:/etc/grafana

Бэкап:

docker run --rm \
  -v grafana_data:/source:ro \
  -v $(pwd):/backup \
  alpine tar czf /backup/grafana_data_$(date +%F).tar.gz -C /source .

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

docker run --rm \
  -v grafana_data:/dest \
  -v $(pwd):/backup \
  alpine tar xzf /backup/grafana_data_*.tar.gz -C /dest

Kubernetes

  • Данные хранятся в PersistentVolume (обычно grafana-data)
  • Рекомендуемый способ: Velero или Kasten K10 для бэкапа PV/PVC
- Альтернатива (CronJob):
  apiVersion: batch/v1
  kind: CronJob
  metadata:
    name: grafana-backup
  spec:
    schedule: "0 2 * * *"
    jobTemplate:
      spec:
        template:
          spec:
            containers:
            - name: backup
              image: bitnami/kubectl
              command:
              - /bin/sh
              - -c
              - kubectl exec grafana-pod -- sqlite3 /var/lib/grafana/grafana.db ".backup '/tmp/grafana.db'" && \
                kubectl cp grafana-pod:/tmp/grafana.db ./backup_$(date +%F).db
            restartPolicy: OnFailure

5. Восстановление из резервной копии

Шаги:

  1. Остановите Grafana: systemctl stop grafana-server или docker compose down
2. Восстановите БД:
  • SQLite: замените файл или используйте sqlite3 new.db ".restore backup.db"
  • PostgreSQL/MySQL: выполните pg_restore или mysql < backup.sql
3. Восстановите конфиги и provisioning:
   cp -r /path/to/backup/provisioning /etc/grafana/
   cp /path/to/backup/grafana.ini /etc/grafana/
4. Проверьте права:
   chown -R grafana:grafana /var/lib/grafana /etc/grafana
   chmod -R 750 /var/lib/grafana /etc/grafana
  1. Запустите сервис: systemctl start grafana-server
  2. Проверьте логи: journalctl -u grafana-server -n 50 --no-pager

Версия Grafana:

Восстанавливайте на ту же или более новую версию. Даунгрейд может сломать схему БД.


6. Автоматизация (готовый скрипт + cron)

grafana-backup.sh

#!/bin/bash
set -euo pipefail

BACKUP_ROOT="/opt/grafana-backups"
RETENTION_DAYS=30
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="$BACKUP_ROOT/$TIMESTAMP"

mkdir -p "$BACKUP_DIR"

# 1. БД (SQLite)
sqlite3 /var/lib/grafana/grafana.db ".backup '$BACKUP_DIR/grafana.db'"

# 2. Конфиги и provisioning
cp /etc/grafana/grafana.ini "$BACKUP_DIR/"
cp -r /etc/grafana/provisioning "$BACKUP_DIR/"
cp -r /var/lib/grafana/plugins "$BACKUP_DIR/" 2>/dev/null || true

# 3. Архив
tar -czf "$BACKUP_DIR.tar.gz" -C "$BACKUP_DIR" .
rm -rf "$BACKUP_DIR"

# 4. Ротация
find "$BACKUP_ROOT" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete

echo "Backup created: $BACKUP_ROOT/$TIMESTAMP.tar.gz"

Настройка cron

chmod +x /usr/local/bin/grafana-backup.sh
echo "0 2 * * * /usr/local/bin/grafana-backup.sh >> /var/log/grafana-backup.log 2>&1" | crontab -

Для отправки в S3/облако добавьте после архивации:

aws s3 cp "$BACKUP_ROOT/$TIMESTAMP.tar.gz" s3://your-bucket/grafana/

7. Лучшие практики

Практика Почему важно
Регулярное тестирование восстановления Бэкап без проверки восстановления ≠ бэкап
Шифрование архивов gpg -c backup.tar.gz или openssl enc
Хранение в 3-2-1 3 копии, 2 носителя, 1 вне площадки
Версионирование Grafana Фиксируйте версию в метаданных бэкапа
Мониторинг бэкапов Алерт в Telegram/Slack/email при ошибке cron
Разделение provisioning и UI Храните дашборды в Git, используйте grafana-cli или CI/CD

8. Типичные ошибки и как их избежать

Ошибка Решение
Бэкап запущенной SQLite без .backup Использовать только sqlite3 ... ".backup 'file'" или останавливать сервис
Восстановление на старую версию Grafana Проверить grafana-server -v перед восстановлением
Забытые provisioning-файлы Всегда бэкапить /etc/grafana/provisioning/ целиком
Несоответствие прав после восстановления chown -R grafana:grafana и chmod 750/640
Бэкап только БД без конфигов Grafana теряет источники данных, темы, SMTP, LDAP