개발·프로덕션 환경을 위한 Git Sync

개발·프로덕션 환경을 위한 Git Sync

개발 환경과 프로덕션 환경을 위해 별도의 Grafana 인스턴스를 두고, 각각 다른 Git 위치와 동기화해 프로덕션 배포 전에 대시보드를 테스트하는 Git Sync 시나리오를 소개하는 문서예요.

단계별 배포, 변경 관리, 품질 보증, 리스크 완화를 위한 구성과 동작 흐름, 그리고 브랜치나 별도 저장소를 이용한 대안까지 확인해 보세요.

출처: 문서

본문

개발용과 프로덕션용으로 별도의 Grafana 인스턴스를 사용하는 구성이에요. 각 인스턴스는 서로 다른 Git 위치와 동기화되며, 프로덕션 배포 전에 대시보드를 테스트할 수 있어요.

언제 사용하나요

  • 단계적 배포(Staged deployments): 프로덕션 배포 전에 대시보드 변경 사항을 테스트해야 할 때
  • 변경 관리(Change control): 대시보드가 프로덕션에 도달하기 전에 승인 절차가 필요할 때
  • 품질 보증(Quality assurance): 비프로덕션 환경에서 대시보드 기능을 검증할 때
  • 리스크 완화(Risk mitigation): 프로덕션 대시보드를 망가뜨릴 위험을 최소화할 때

아키텍처

┌────────────────────────────────────────────────────────────┐
│              GitHub Repository                             │
│   Repository: your-org/grafana-manifests                 │
│   Branch: main                                             │
│                                                            │
│   grafana-manifests/                                     │
│   ├── dev/                                                │
│   │   ├── dashboard-new.json    ← Development dashboards │
│   │   └── dashboard-test.json                            │
│   │                                                       │
│   └── prod/                                               │
│       ├── dashboard-stable.json  ← Production dashboards │
│       └── dashboard-approved.json                        │
└────────────────────────────────────────────────────────────┘
           ↕                                 ↕
    Git Sync (dev/)              Git Sync (prod/)
           ↕                                 ↕
┌─────────────────────┐          ┌─────────────────────┐
│  Dev Grafana        │          │  Prod Grafana       │
│                     │          │                     │
│  Repository:        │          │  Repository:        │
│  - path: dev/       │          │  - path: prod/      │
│                     │          │                     │
│  Creates folder:    │          │  Creates folder:    │
│  "grafana-manifests"│         │  "grafana-manifests"│
└─────────────────────┘          └─────────────────────┘

저장소 구조

Git에서:

your-org/grafana-manifests
├── dev/
│   ├── dashboard-new.json
│   └── dashboard-test.json
└── prod/
    ├── dashboard-stable.json
    └── dashboard-approved.json

Grafana 대시보드 보기에서:

Dev 인스턴스:

Dashboards
└── 📁 grafana-manifests/
    ├── New Dashboard
    └── Test Dashboard

Prod 인스턴스:

Dashboards
└── 📁 grafana-manifests/
    ├── Stable Dashboard
    └── Approved Dashboard
  • 두 인스턴스 모두 저장소 이름에서 유래한 "grafana-manifests"라는 폴더를 만들어요.
  • 각 인스턴스는 자신이 구성한 경로(dev/ 또는 prod/)의 대시보드만 표시해요.
  • 대시보드는 JSON 파일의 제목으로 표시됩니다.

구성 파라미터

개발(Development):

  • 저장소(Repository): your-org/grafana-manifests
  • 브랜치(Branch): main
  • 경로(Path): dev/

프로덕션(Production):

  • 저장소(Repository): your-org/grafana-manifests
  • 브랜치(Branch): main
  • 경로(Path): prod/

동작 방식

  1. 개발자가 개발 환경에서 대시보드를 만들고 수정해요.
  2. Git Sync가 변경 사항을 dev/에 커밋해요.
  3. Git에서 변경 사항을 검토해요.
  4. 승인된 대시보드를 dev/에서 prod/로 승격(promote)해요.
  5. 프로덕션이 prod/에서 동기화해요.
  6. 프로덕션 대시보드가 업데이트됩니다.

대안 1: 브랜치 사용하기

서로 다른 경로를 사용하는 대신, 인스턴스들이 서로 다른 브랜치를 사용하도록 구성할 수도 있어요.

개발 인스턴스:

  • 저장소: your-org/grafana-manifests
  • 브랜치: develop
  • 경로: grafana/

프로덕션 인스턴스:

  • 저장소: your-org/grafana-manifests
  • 브랜치: main
  • 경로: grafana/

이 방식을 사용하면:

  • 개발 변경 사항은 develop 브랜치로 이동해요.
  • Git merge나 pull request 워크플로를 사용해 develop에서 main으로 변경 사항을 승격해요.
  • 프로덕션은 main 브랜치에서 자동으로 동기화해요.

대안 2: 더 엄격한 격리를 위해 별도 저장소 사용하기

더 엄격한 격리가 필요하다면 완전히 분리된 저장소를 사용하세요.

개발 인스턴스:

  • 저장소: your-org/grafana-manifests-dev
  • 브랜치: main
  • 경로: grafana/

프로덕션 인스턴스:

  • 저장소: your-org/grafana-manifests-prod
  • 브랜치: main
  • 경로: grafana/

더 알아보기 (Learn more)