그라파나(Grafana) 서버, 안전하게 백업하고 복원하는 방법
Docker환경의 Grafana 백업 및 복원하기
도커(Docker)를 사용해 그라파나(Grafana)를 운영하는 것은 매우 효율적이지만, 백업 전략은 기존 방식과 다릅니다. 컨테이너는 일회성이지만 데이터는 영구적이어야 하기 때문입니다.
대시보드 데이터가 도커 볼륨(Volume)로 관리되고 있기 때문에 이 볼륨을 어떻게 안전하게 백업하고 필요할 때 완벽하게 복원하는 지 이해하는 것이 중요합니다. 도커 환경에 최적화된 그라파나 백업 및 복원 방법을 공부한 내용을 정리합니다.
왜 도커 환경의 백업은 다를까요?
표준 설치에서 그라파나 데이터는 호스트 시스템의 /var/lib/grafana 같은 특정 경로에 저장됩니다. 하지만 도커 환경에서 컨테이너는 언제든 삭제되거나 교체될 수 있는 일회성 존재입니다. 따라서 우리는 도커 볼륨(Docker Volume)을 사용하여 데이터를 컨테이너 외부의 영구적인 공간에 저장합니다. 결국 ’도커 그라파나를 백업한다’는 것은 ’그라파나 컨테이너가 사용하는 도커 볼륨을 백업한다’는 의미와 같습니다.
백업 대상: 무엇을, 어떻게 저장해야 할까?
도커 환경의 백업 대상은 명확히 두 가지로 나뉩니다.
첫째는 대시보드, 데이터 소스, 사용자 정보가 담긴 SQLite 데이터베이스(grafana.db)와 플러그인 등이 포함된 데이터 볼륨입니다.
둘째는 그라파나 컨테이너를 실행하는 방식, 즉 docker run 명령어 또는 docker-compose.yml 파일입니다.
이 설정 파일에는 사용 중인 이미지 버전, 환경 변수(DB 연결 정보 등), 네트워크 설정 등 모든 ’설정값’이 담겨 있으므로, 데이터 볼륨만큼이나 중요합니다.
그라파나 도커 볼륨 백업하기
백업 방법은 사용자가 데이터를 ‘바인드 마운트(Bind Mount)’ 했는지, 아니면 ’명명된 볼륨(Named Volume)’을 사용하는지에 따라 약간 달라집니다. 먼저 데이터 일관성을 위해 실행 중인 그라파나 컨테이너를 중지합니다. (컨테이너 이름이 ’grafana’라고 가정합니다)
docker stop grafanadocker-compose를 사용하는 경우 Docker가 관리하는 볼륨이름이 각각 다르게 사용됩니다. 사용되는 명령은 grafana-data의 볼륨으로 연결되어 있는 것을 가정합니다.
volumes:
- grafana-data:/var/lib/grafana
Docker Compose는 docker-compose.yml 파일 내에서 볼륨을 정의하면, 다른 프로젝트와의 충돌을 피하기 위해 볼륨 이름 앞에 “프로젝트명_”을 자동으로 붙입니다. 따라서 아래 명령으로 정확한 위치를 확인해야 합니다.
docker ps --filter volume=[볼륨_이름]결과는 아래와 같이 grafana_ 접두어가 추가된 것을 확인할 수 있습니다. 백업과 복원은 아래의 위치로 진행되어야 합니다.
"Mounts": [
{
"Type": "volume",
"Name": "grafana_grafana-data",
"Source": "/var/lib/docker/volumes/grafana_grafana-data/_data",
"Destination": "/var/lib/grafana",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
],이제 두 가지 시나리오별 백업 방법을 알아봅니다.
시나리오 1: 바인드 마운트 (Bind Mount) 방식 백업
바인드 마운트는 호스트의 특정 디렉토리(예: /opt/grafana-data)를 컨테이너 내부의 /var/lib/grafana 경로에 직접 연결하는 방식입니다. 이 경우, 백업은 호스트의 해당 디렉토리를 압축하는 것만으로 매우 간단하게 완료됩니다.
# /opt/grafana-data 디렉토리를 통째로 압축하여 백업합니다.
sudo tar czvf grafana_backup_$(date +%F).tar.gz -C /opt/grafana-data .명령어의 -C /opt/grafana-data . 부분은 해당 디렉토리로 이동한 후 현재 디렉토리(.)의 모든 내용을 압축하라는 의미로, 압축 해제 시 경로 문제를 방지합니다.
시나리오 2: 명명된 볼륨 (Named Volume) 방식 백업
명명된 볼륨(예: grafana-data)을 사용하는 경우, 이 볼륨은 도커가 관리하는 특정 경로(예: /var/lib/docker/volumes/grafana-data/_data)에 저장됩니다. 이 경로에 직접 접근하기보다, 도커의 방식을 따라 백업하는 것이 안전합니다. 백업용 임시 컨테이너를 실행하여, ‘grafana-data’ 볼륨과 현재 호스트 경로(백업 파일이 저장될 위치)를 마운트한 뒤 압축합니다.
# 'grafana-data' 볼륨의 내용을 현재 경로(pwd)에 .tar.gz 파일로 백업합니다.
docker run --rm -v grafana-data:/volume -v $(pwd):/backup busybox tar czvf /backup/grafana_volume_backup_$(date +%F).tar.gz -C /volume .이 명령어는 busybox라는 초경량 이미지를 사용해 임시 컨테이너를 띄우고, 볼륨의 내용을 /backup (즉, 호스트의 현재 경로)에 압축 파일을 생성한 뒤 사라집니다.
잊지 말아야 할 설정 백업
데이터 볼륨을 백업했다면, 컨테이너 실행 설정인 docker-compose.yml 파일이나 docker run 명령 스크립트도 반드시 별도로 복사하여 보관해야 합니다. 이 파일이 없으면, 동일한 환경으로 복원하는 것이 사실상 불가능합니다.
그라파나 도커 환경 복원하기
이제 백업된 파일을 사용하여 새로운 서버나 기존 환경에 그라파나를 복원해 보겠습니다.
1단계: 설정 파일 준비 및 볼륨 공간 생성
먼저 백업해둔 docker-compose.yml 파일(혹은 docker run 스크립트)을 복원할 위치로 가져옵니다. 바인드 마운트 방식의 경우, 데이터를 채워 넣을 호스트 디렉토리를 미리 생성해야 합니다.
# (바인드 마운트 방식의 경우) docker-compose.yml 파일에 지정된 호스트 경로를 생성합니다.
sudo mkdir -p /opt/grafana-data명명된 볼륨 방식의 경우, docker-compose up을 실행하면 도커가 볼륨을 자동으로 생성해 주므로 이 단계가 필요 없을 수 있으나, 수동으로 생성해도 무방합니다. (docker volume create grafana-data)
2단계: 데이터 볼륨 복원
이제 백업 파일을 사용하여 비어있는 볼륨 공간에 데이터를 채워 넣습니다.
바인드 마운트 방식 복원: 단순히 압축 파일을 생성했던 호스트 디렉토리에 해제합니다.
sudo tar xzvf grafana_backup_YYYY-MM-DD.tar.gz -C /opt/grafana-data명명된 볼륨 방식 복원: 백업 시 사용했던 docker run 명령어를 반대로 활용하여 압축을 해제합니다.
# 'grafana-data'라는 (비어있는) 볼륨에 백업 파일의 압축을 풉니다.
docker run --rm -v grafana-data:/volume -v $(pwd):/backup busybox tar xzvf /backup/grafana_volume_backup_YYYY-MM-DD.tar.gz -C /volume3단계: (매우 중요) 파일 권한 조정
도커 환경에서 복원 시 가장 흔히 겪는 문제입니다. 그라파나 컨테이너는 내부적으로 grafana 사용자(UID 472) 권한으로 실행됩니다. 하지만 우리가 root 계정으로 파일을 복원하면, 파일 소유자가 root가 되어 그라파나 프로세스가 데이터베이스 파일을 읽거나 쓰지 못해 실행에 실패합니다. 바인드 마운트 방식의 경우, 호스트 디렉토리의 소유권을 472로 반드시 변경해야 합니다.
# 바인드 마운트된 호스트 디렉토리의 소유권을 Grafana의 UID/GID (472)로 변경합니다.
sudo chown -R 472:472 /opt/grafana-data명명된 볼륨 방식은 도커가 권한을 관리하므로 이 문제가 발생할 가능성이 낮지만, 문제가 생긴다면 동일한 원리입니다.
4단계: 그라파나 컨테이너 시작
이제 모든 준비가 끝났습니다. docker-compose.yml 파일이 있는 위치에서 컨테이너를 시작합니다.
docker-compose up -d잠시 후 그라파나 웹 인터페이스에 접속하여 모든 대시보드와 설정이 완벽하게 복원되었는지 확인합니다.
결론: 도커 백업의 핵심은 ‘볼륨’과 ’설정’
도커 환경에서의 그라파나 백업은 결국 ‘데이터가 담긴 볼륨’과 ’컨테이너 실행 정보가 담긴 설정 파일’을 함께 보관하는 과정입니다. 특히 바인드 마운트 사용 시 복원 과정에서 발생하는 ’파일 권한(UID 472)’ 문제만 기억한다면, 어떤 장애 상황에서도 데이터를 안전하게 지켜낼 수 있습니다. 정기적인 볼륨 백업을 자동화하여 여러분의 소중한 모니터링 자산을 보호하시기 바랍니다.
이해 확인 퀴즈
- 도커 환경에서 그라파나를 완벽하게 복원하기 위해 반드시 백업해야 할 두 가지 핵심 요소는 무엇인가요?
- 바인드 마운트 방식으로 데이터를 복원한 후, 그라파나 컨테이너가 데이터베이스 접근 권한 오류로 시작되지 않을 때, 호스트에서 실행해야 할 명령어는 무엇인가요? (사용자 ID 포함)