코드형 Git Sync 설정

코드형 Git Sync 설정 (Set up Git Sync as code)

이 문서는 Grafana CLI인 gcx를 사용해 코드형으로 Git Sync를 구성하는 방법을 안내해요. Custom Resource Definitions(CRDs)를 YAML 파일로 만들어 gcx로 Grafana에 푸시해 GitOps 스타일의 자동화된 워크플로를 구성해요.

출처: 문서

본문

gcx(Grafana CLI)를 사용해 Git Sync를 구성할 수도 있어요. Git Sync 구성은 Custom Resource Definitions(CRDs)를 사용해 코드로 관리되기 때문에, 필요한 리소스를 YAML 파일로 만들고 gcx로 Grafana에 푸시할 수 있어요. 이 접근 방식은 Grafana UI를 사용하는 대신 Git Sync 구성을 관리하는 자동화된 GitOps 스타일 워크플로를 가능하게 해요.

자세한 내용은 다음 문서를 참고해요:

Grafana CLI로 코드형 Git Sync 설정 (Set up Git Sync as code with the Grafana CLI)

gcx로 코드형 Git Sync를 설정하려면 다음 단계를 따라요:

  1. 사용 및 성능 제한(Usage and performance limitations)을 이해해요.
  2. 연결 및 저장소 CRD를 생성해요.
  3. CRD를 Grafana에 푸시해요.
  4. 저장소 리소스를 관리해요.
  5. 설정을 검증해요.

리소스 CRD 생성 (Create the resources CRDs)

지원되는 Git provider 중 하나에 Personal Access Token으로 연결한다면, 저장소와 Grafana 인스턴스 사이의 연결을 정의하는 repository 리소스를 만들어야 해요. GitHub App으로 Git Sync에 연결한다면 repository 리소스 외에도 connection 리소스를 만들어야 해요.

연결 리소스 생성 (Create the connection resource)

GitHub App으로 Git Sync에 연결한다면, Git Sync 연결 구성을 정의하는 connection.yaml 파일을 만들어요:

apiVersion: provisioning.grafana.app/v0alpha1
kind: Connection
metadata:
  name: '<GITHUB_CONNECTION_NAME>'
  namespace: default
spec:
  title: '<REPOSITORY_TITLE>'
  type: github
  url: https://github.com
  github:
    appID: '<GITHUB_APP_ID>'
    installationID: '<GITHUB_INSTALL_ID>'
    serverUrl: '<GITHUB_ENTERPRISE_SERVER_URL>' # Only required for GitHub Enterprise
secure:
  privateKey:
    create: '<GITHUB_PRIVATE_KEY>'

플레이스홀더를 값으로 바꿔주세요:

  • <GITHUB_CONNECTION_NAME>: GitHub 연결의 이름
  • <REPOSITORY_TITLE>: Grafana UI에 표시되는 사람이 읽을 수 있는 이름
  • <GITHUB_APP_ID>: GitHub App의 고유 식별자
  • <GITHUB_INSTALL_ID>: GitHub App 설치 id
  • <GITHUB_PRIVATE_KEY>: GitHub Private Key

저장소 리소스 생성 (Create the repository resource)

다음으로 Git Sync 구성을 정의하는 repository.yaml 파일을 만들어요. Git provider와 인증 방법에 따라 Personal Access Token 정보 또는 연결 이름을 추가해요:

apiVersion: provisioning.grafana.app/v0alpha1
kind: Repository
metadata:
  name: '<REPOSITORY_NAME>'
spec:
  sync:
    enabled: true
    intervalSeconds: 60
    target: folder
  workflows:
    - write
    - branch
  title: '<REPOSITORY_TITLE>'

# Git Sync for GitHub:
spec:
  type: github
  github:
    url: '<GIT_REPO_URL>'
    branch: '<BRANCH>'
    path: grafana/
  # GitHub App connection only:
  connection:
    name: '<GITHUB_CONNECTION_NAME>'
# GitHub Personal Access Token only:
secure:
  token: { create: 'GIT_PAT' }

# Git Sync for GitHub Enterprise:
spec:
  type: githubEnterprise
  githubEnterprise:
    url: '<GIT_REPO_URL>'
    branch: '<BRANCH>'
    path: grafana/
  # GitHub Enterprise App connection only:
  connection:
    name: '<GITHUB_ENTERPRISE_CONNECTION_NAME>'
# GitHub Personal Access Token only:
secure:
  token: { create: 'GIT_PAT' }

# GitLab Personal Access Token only:
spec:
  type: gitlab
  gitlab:
    url: '<GIT_REPO_URL>'
    branch: '<BRANCH>'
secure:
  token: { create: 'GIT_PAT' }

# Bitbucket Personal Access Token only:
spec:
  type: bitbucket
  bitbucket:
    url: '<GIT_REPO_URL>'
    branch: '<BRANCH>'
    tokenUser: tokenuser
secure:
  token: { create: 'GIT_PAT' }

# Pure Git only:
spec:
  type: git
  git:
    url: '<GIT_REPO_URL>'
    branch: '<BRANCH>'
    path: 'grafana/'
    tokenUser: tokenuser
secure:
  token: { create: 'GIT_PAT' }

플레이스홀더를 값으로 바꿔주세요:

  • <REPOSITORY_NAME>: 이 저장소 리소스의 고유 식별자
  • <REPOSITORY_TITLE>: Grafana UI에 표시되는 사람이 읽을 수 있는 이름
  • <GIT_REPO_URL>: GitHub 저장소 URL
  • <BRANCH>: 동기화할 브랜치
  • <GITHUB_CONNECTION_NAME>: GitHub 연결의 이름
  • <GITHUB_ENTERPRISE_CONNECTION_NAME>: GitHub Enterprise 연결의 이름
  • <GIT_PAT>: Git provider Personal Access Token

Note Git Sync는 두 가지 동기화 대상을 지원해요: target: folder(기본값)는 저장소 이름으로 폴더를 만들고 그 안에 동기화된 리소스를 배치하며, target: folderless는 래퍼 폴더를 만들지 않고 동기화된 리소스를 최상위 레벨에 배치해요. 자세한 내용은 동기화 대상(Sync targets)을 참고해요.

구성 매개변수 (Configuration parameters)

다음 구성 매개변수를 사용할 수 있어요:

Field Description
metadata.name 이 저장소 리소스의 고유 식별자
spec.title Grafana UI에 표시되는 사람이 읽을 수 있는 이름
spec.type 저장소 유형 (github, githubEnterprise)
spec.github.url GitHub 저장소 URL
spec.github.branch 동기화할 브랜치
spec.github.path 대시보드가 포함된 디렉터리 경로
spec.github.generateDashboardPreviews 프리뷰 이미지 생성 (true/false) (GitHub에서만 사용 가능)
spec.sync.enabled 동기화 활성화 (true/false)
spec.sync.intervalSeconds 동기화 간격(초)
spec.sync.target 동기화된 대시보드를 배치할 위치 (folder 또는 folderless)
spec.workflows 활성화된 워크플로: write(직접 커밋), branch(PR)
secure.token.create GitHub Personal Access Token

리소스를 Grafana에 푸시 (Push the resources to Grafana)

리소스를 푸시하기 전에 gcx를 Grafana 인스턴스 세부 정보로 구성해요. 설정 방법은 Grafana CLI 문서를 참고해요. 저장소 구성을 푸시해요. GitHub App으로 Git Sync에 연결한다면 연결 리소스 구성 파일도 푸시해요.

gcx resources push --path <DIRECTORY>

--path 매개변수는 repository.yaml과 connection.yaml 파일이 있는 디렉터리를 가리켜야 해요. 푸시 후 Grafana는 다음을 수행해요:

  1. 필요한 리소스를 생성해요 (repository 및, GitHub App의 경우 connection).
  2. GitHub 저장소에 연결해요.
  3. 지정된 경로에서 대시보드를 가져와요.
  4. 구성된 간격으로 동기화를 시작해요.

저장소 리소스 관리 (Manage repository resources)

저장소 나열 (List repositories)

모든 저장소를 나열하려면:

gcx resources get repositories

저장소 세부 정보 가져오기 (Get repository details)

특정 저장소의 세부 정보를 가져오려면:

gcx resources get repository/<REPOSITORY_NAME>
gcx resources get repository/<REPOSITORY_NAME> -o json
gcx resources get repository/<REPOSITORY_NAME> -o yaml

저장소 업데이트 (Update the repository)

저장소를 업데이트하려면:

gcx resources edit repository/<REPOSITORY_NAME>

저장소 삭제 (Delete the repository)

저장소를 삭제하려면:

gcx resources delete repository/<REPOSITORY_NAME>

설정 검증 (Verify setup)

Git Sync가 작동하는지 확인해요:

# List repositories
gcx resources get repositories

# Check Grafana UI
# Navigate to: Administration → Provisioning → Git Sync

더 알아보기