Grafana OSS/Enterprise에서 Grafana Cloud로 수동 마이그레이션

Grafana OSS/Enterprise에서 Grafana Cloud로 수동 마이그레이션 (Migrate from Grafana OSS/Enterprise to Grafana Cloud manually)

이 마이그레이션 가이드는 Grafana OSS/Enterprise 사용자가 Grafana Cloud로 수동으로 전환하는 것을 돕기 위해 설계됐어요. 대시보드·폴더·데이터 소스 같은 Grafana 리소스를 기존 인스턴스에서 당겨와 필요 시 수정한 뒤 새 Grafana Cloud 인스턴스에 밀어 넣는 방식으로 진행합니다.

참고: 자체 관리 데이터베이스의 기존 데이터를 Grafana Cloud로 가져오는 표준 방법은 아직 없어요. 팁: Grafana v12에서 일반 공개된 Grafana Cloud Migration Assistant를 사용해 리소스를 자동 마이그레이션할 수 있어요.

출처: 문서

본문

수동 마이그레이션 계획·수행

Migration Assistant가 지원하는 범위를 넘는 리소스를 마이그레이션해야 한다면 이 가이드로 수동 마이그레이션하세요. 기존 Grafana OSS/Enterprise 고객이라면 Grafana Labs 계정 팀에 연락해 전환 기간을 계획하고 라이선스를 준비하며 구독 비용을 비교하세요. 보안·컴플라이언스 정책은 Grafana Labs Trust Center에서 평가할 수 있어요.

전체 조직을 마이그레이션하기 전에 Cloud에서 "test" 스택을 설정해 먼저 마이그레이션해볼 수 있어요. Grafana Alerting을 쓴다면 알림이 두 번 발화하지 않도록 별도의 컨택트 포인트를 설정하세요. 마이그레이션 시점에는 사용자가 새 대시보드·알림을 만들지 못하게 하루의 전환(cutover) 기간을 두는 것이 좋아요.

컴포넌트 마이그레이션 수고 참고
Folders 낮음
Dashboards 낮음 데이터 소스 참조 이름 변경 필요할 수 있음
Alerts 중간 데이터 소스 기반 알림은 조정 필요할 수 있음
Plugins 중간 플러그인 기능에 따라 다름
Data sources 높음 시크릿을 참조하면 다시 제공해야 함

시작하기 전에

  • Grafana Cloud Stack과 코드 스니펫을 실행할 Linux 머신(또는 WSL2)
  • Grafana Cloud 스택 관리자 접근 (https://grafana.com/orgs/<your-org-name>/members에서 확인)
  • 기존 Grafana OSS/Enterprise 관리자 접근 (https://<grafana-onprem-url>/admin/users 확인)
  • 데이터 소스 연결 자격 증명(API 키, username/password 등). 암호화되어 있어 인스턴스 간 복사 불가
  • 일부 데이터 소스가 네트워크 내부에서만 접근 가능하면 Private Data Source Connect 요구사항 확인
  • Plugins·Reports·Playlists만: curljq 도구

Grafana OSS/Enterprise를 최신 버전으로 업그레이드

Grafana Cloud 스택은 일반적으로 최신 Grafana를 실행해요. 마이그레이션 중 문제를 피하기 위해 업그레이드 가이드를 따라 업그레이드하세요.

Grafana 리소스 마이그레이션

마이그레이션은 기존 인스턴스에서 리소스를 당겨오고(pull), 필요한 경우 수정하고, 새 Grafana Cloud 인스턴스로 밀어 넣는(push) 과정입니다. 스크립트 실행 전 다음 플레이스홀더를 치환하세요:

  • $GRAFANA_SOURCE_TOKEN — Grafana OSS/Enterprise 액세스 토큰
  • $GRAFANA_DEST_TOKEN — Grafana Cloud 액세스 토큰
  • $GRAFANA_ONPREM_INSTANCE_URL — OSS/Enterprise URL(예: https://grafana.mydomain.com)
  • $GRAFANA_CLOUD_INSTANCE_URL — Cloud URL(예: https://myorganization.grafana.net)

Grafana 플러그인 마이그레이션

플러그인은 대시보드 같은 다른 리소스의 기능·표시에 영향을 주는 핵심 구성요소이므로 마이그레이션의 첫 단계입니다.

  1. OSS/Enterprise의 /api/plugins 엔드포인트로 설치된 플러그인 조회:
response=$(curl -s -H "Accept: application/json" -H "Authorization: Bearer $GRAFA...OKEN" "${GRAFANA_ONPREM_INSTANCE_URL}/api/plugins")

plugins=$(echo $response | jq '[.[] | select(.signatureType == "community" or (.signatureType != "internal" and .signatureType != "")) | {name: .id, version: .info.version}]')

echo "$plugins" > plugins.json

community 플러그인과 외부 서명 플러그인만 필터링해 ID·버전을 plugins.json에 저장합니다. 2. Grafana Cloud로 가져오기(POST to https://grafana.com/api/instances/<stack_slug>/plugins):

CLOUD_INSTANCE=$GRAFANA_CLOUD_INSTANCE_URL

stack_slug="${CLOUD_INSTANCE#*//}"
stack_slug="${stack_slug%%.*}"
jq -c '.[]' plugins.json | while IFS= read -r plugin; do
  name=$(echo "$plugin" | jq -r '.name')
  version=$(echo "$plugin" | jq -r '.version')
  echo "Adding plugin $name with version $version to stack $stack_slug"
  response=$(curl -s -X POST "https://grafana.com/api/instances/$stack_slug/plugins" \
            -H "Authorization: Bearer <GRAFA...KEN>" \
            -H "Content-Type: application/json" \
            -d "{\"plugin\": \"$name\", \"version\": \"$version\"}")
  echo "POST response for plugin $name version $version: $response"
done

<GRAFANA_CLOUD_ACCESS_TOKEN>을 Grafana Cloud 접근 정책 토큰으로 교체하세요(access policies 참고).

코드로 이미 프로비저닝된 리소스 마이그레이션

Terraform, Ansible, Grafana HTTP API로 프로비저닝한다면 Grafana URL·자격 증명을 교체해 새 Cloud 인스턴스로 리디렉션하세요.

Grizzly로 대시보드·폴더·데이터 소스·라이브러리 패널·알림 규칙 마이그레이션

Grizzly는 Grafana 리소스 작업을 간소화하는 CLI 도구입니다.

# download the binary (adapt os and arch as needed)
$ curl -fSL -o "/usr/local/bin/grr" "https://github.com/grafana/grizzly/releases/download/v0.3.1/grr-linux-amd64"

# make it executable
$ chmod a+x "/usr/local/bin/grr"

# have fun :)
$ grr --help

작업 폴더를 만들고, 두 인스턴스에 서비스 계정액세스 토큰을 만들어 Grizzly에 권한을 줍니다(Administration > Users and access > Service Accounts, "grizzly-migration" 이름·Admin 역할). 두 인스턴스에 컨텍스트를 구성하세요:

grr config create-context grafana-onprem
grr config use-context grafana-onprem
grr config set output-format json
grr config set grafana.url $GRAFANA_ENT_INSTANCE_URL
grr config set grafana.token $GRAFANA_SOURCE_TOKEN

grr config create-context grafana-cloud
grr config use-context grafana-cloud
grr config set output-format json
grr config set grafana.url $GRAFANA_CLOUD_INSTANCE_URL
grr config set grafana.token $GRAFANA_DEST_TOKEN
기존 리소스 내보내기

grafana-onprem 컨텍스트로 전환해 pull 명령으로 마이그레이션할 리소스를 가져오세요:

grr config use-context grafana-onprem
grr pull . \
  -t 'Dashboard/*' \
  -t 'Datasource/*' \
  -t 'DashboardFolder/*' \
  -t 'LibraryElement/*' \
  -t 'AlertRuleGroup/*' \
  -t 'AlertContactPoint/*' \
  -t 'AlertNotificationPolicy/*'
리소스를 Grafana Cloud 스택에 밀어 넣기
grr config use-context grafana-cloud

grr apply . -t 'DashboardFolder/*'
grr apply . -t 'LibraryElement/*'
grr apply . -t 'Datasource/*'
grr apply . -t 'Dashboard/*'
grr apply . -t 'AlertRuleGroup/*'
grr apply . -t 'AlertContactPoint/*'
grr apply . -t 'AlertNotificationPolicy/*'
데이터 소스 자격 증명 채우기

데이터 소스 마이그레이션 후 토큰·username·password 같은 자격 증명을 채워야 해요. 보안상 grizzly는 기존 인스턴스의 암호화된 데이터 소스 자격 증명을 읽을 수 없습니다. 새 Cloud 인스턴스의 Connections > Datasources에서 모든 데이터 소스 자격 증명이 설정되었는지 확인하세요. grafanacloud로 시작하는 데이터 소스는 Grafana Cloud가 직접 관리하므로 건너뛸 수 있어요. 내부 네트워크에서만 접근 가능한 데이터 소스는 Private Data Source Connect를 참고하세요.

(선택) Private Data Source Connect (PDC) 구성

네트워크로 보호되는 데이터 소스에만 적용됩니다. 프라이빗 네트워크·방화벽 뒤의 데이터 소스(예: Prometheus, SQL DB)에 Grafana Cloud가 접근하지 못할 수 있어요. PDC 구성 후 데이터 소스를 PDC로 연결하도록 구성하세요. PDC는 네트워크 보안 데이터 소스에만 필요하며 Splunk·CloudWatch처럼 공개 인터넷으로 접근 가능한 데이터 소스에는 불필요해요. PDC 개요 참고.

Grafana HTTP API로 Reports·Playlists 마이그레이션

Grizzly는 Reports와 Playlists를 아직 지원하지 않으므로 HTTP API의 curl로 수행합니다.

Reports (Grafana Enterprise만)
  1. 내보내기 — api/reports 엔드포인트 호출, reports.json에 저장:
curl ${GRAFANA_ONPREM_INSTANCE_URL}/api/reports -H "Authorization: Bearer $GRAFA...OKEN" > reports.json
  1. 가져오기:
jq -M -r -c '.[]' < reports.json | while read -r json; do curl -XPOST ${GRAFANA_CLOUD_INSTANCE_URL}/api/reports -H"Authorization: Bearer $GRAFA...OKEN" -d"$json" -H 'Content-Type: application/json'; done
Playlists
  1. 내보내기 — /api/playlists 조회 후 각 UID의 상세를 파일로 저장:
mkdir playlists
curl "${GRAFANA_ONPREM_INSTANCE_URL}/api/playlists" \
-H "Authorization: Bearer $GRAFA...OKEN" \
| jq -M -r -c '.[] | .uid' \
| while read -r uid; do \
curl "${GRAFANA_ONPREM_INSTANCE_URL}/api/playlists/$uid" \
    -H "Authorization: Bearer $GRAFA...OKEN" \
    > playlists/$uid.json; \
done
  1. 가져오기:
for playlist in playlists/*; do
  curl -XPOST "${GRAFANA_CLOUD_INSTANCE_URL}/api/playlists" \
    -H "Authorization: Bearer $GRAFA...OKEN" \
    -H "Content-Type: application/json" \
    -d $playlist > /dev/null;
done

Single sign-on 구성 마이그레이션

Grafana Cloud 스택은 익명 인증Auth proxy를 제외한 모든 Grafana OSS/Enterprise 인증·권한 옵션을 지원합니다. 다만 SSO 설정은 대시보드·알림처럼 내보내기·가져오기할 수 없어요. SAML은 이 지침으로 UI/API에서 새로 구성하세요. LDAP와 OIDC/OAuth2는 Grafana Labs 지원팀만 Grafana Cloud에서 구성할 수 있으므로 여기의 지침으로 SSO 구성을 요청하세요.

커스텀 Grafana 구성 마이그레이션

Grafana 구성은 환경 변수·파일 시스템에 저장되므로 Cloud 사용자는 접근할 수 없어요. 지원 티켓을 열어 Grafana Labs 지원 엔지니어에게 커스터마이즈를 요청할 수 있어요. 지원으로 가능한 커스터마이즈:

다음은 Grafana Cloud에서 지원하지 않는 구성입니다:

다음 단계

더 알아보기 (Learn more)