snow · 2026.5.15 11:04 · 조회 2

Grafana 백업 및 복구

백업 대상

Grafana의 모든 설정은 SQLite(기본) 또는 MySQL/PostgreSQL 데이터베이스와 설정 파일에 저장됩니다.

항목위치내용
데이터베이스/var/lib/grafana/grafana.db대시보드, 사용자, 데이터 소스, 알림 설정
설정 파일/etc/grafana/grafana.ini서버 설정
플러그인/var/lib/grafana/plugins/설치된 플러그인
Provisioning/etc/grafana/provisioning/코드 기반 설정

SQLite 데이터베이스 백업

#!/bin/bash
BACKUP_DIR=/backup/grafana
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR

# 서비스 중단 없이 백업 (SQLite WAL 모드)
cp /var/lib/grafana/grafana.db $BACKUP_DIR/grafana_$DATE.db

# 설정 파일 백업
cp /etc/grafana/grafana.ini $BACKUP_DIR/grafana_$DATE.ini

# 30일 이상 된 백업 삭제
find $BACKUP_DIR -name "*.db" -mtime +30 -delete

echo "백업 완료: grafana_$DATE.db"

Cron 등록

0 2 * * * /opt/scripts/grafana-backup.sh >> /var/log/grafana-backup.log 2>&1

Docker 환경 백업

# 볼륨 백업
docker run --rm \
  -v grafana_data:/source \
  -v /backup/grafana:/backup \
  alpine tar -czf /backup/grafana_$(date +%Y%m%d).tar.gz -C /source .

대시보드 내보내기

UI에서 개별 대시보드 내보내기

  1. 대시보드 열기
  2. 상단 공유 아이콘 → Export
  3. Export for sharing externally 활성화
  4. Save to file 클릭

API로 일괄 내보내기

TOKEN="your-service-account-token"
GRAFANA_URL="http://grafana:3000"

# 대시보드 목록 조회
dashboards=$(curl -s -H "Authorization: Bearer $TOKEN" \
  "$GRAFANA_URL/api/search?type=dash-db" | jq -r '.[].uid')

# 각 대시보드 내보내기
for uid in $dashboards; do
  curl -s -H "Authorization: Bearer $TOKEN" \
    "$GRAFANA_URL/api/dashboards/uid/$uid" \
    | jq '.dashboard' > "dashboard_${uid}.json"
done

복구

데이터베이스 복구

sudo systemctl stop grafana-server
cp /backup/grafana/grafana_20251001_020000.db /var/lib/grafana/grafana.db
sudo chown grafana:grafana /var/lib/grafana/grafana.db
sudo systemctl start grafana-server

대시보드 가져오기

Dashboards → Import → JSON 파일 업로드 또는 붙여넣기


MySQL/PostgreSQL 백업 (외부 DB 사용 시)

외부 DB를 사용하는 경우 표준 DB 백업 방식을 사용합니다.

# MySQL 백업
mysqldump -u grafana -p grafana > grafana_$(date +%Y%m%d).sql

# 복구
mysql -u grafana -p grafana < grafana_20251001.sql

댓글

아직 댓글이 없습니다.

댓글을 작성하려면 로그인이 필요합니다.