ArgoCD를 사용한 GitOps로 Grafana 대시보드 관리하기

ArgoCD를 사용한 GitOps로 Grafana 대시보드 관리하기 (Manage Grafana dashboards with GitOps using ArgoCD)

출처: 문서

이 가이드는 ArgoCD를 사용해 Grafana 대시보드를 Git 저장소와 동기화하는 지속적 배포 파이프라인을 설정하는 방법을 보여줘요. Grafana Operator가 제공하는 Grafana Dashboard 커스텀 리소스를 사용해 대시보드 구성을 선언적으로 관리할 거예요.

사전 준비 사항

시작하기 전에 다음이 준비되어 있는지 확인하세요.

  • 기존 Grafana Cloud 스택
  • Grafana Operator 설치에 설명된 대로 Grafana Operator가 설치된 Kubernetes 클러스터
  • Kubernetes 클러스터에 설치된 ArgoCD. ArgoCD 설치 가이드를 참고하세요.
  • 대시보드 구성을 저장할 Git 저장소

Git 저장소 설정하기

대시보드 구성을 정리하기 위해 저장소에 디렉터리 구조를 만드세요. 이 튜토리얼에서는 grafana라는 폴더를 만들 거예요.

Grafana Operator 설정하기

Grafana Operator를 사용하면 Grafana 커스텀 리소스(CR)로 Grafana 인스턴스에 인증할 수 있어요.

Grafana API 토큰 시크릿 만들기

Grafana API 토큰을 시크릿에 저장하세요. Git 저장소의 grafana 폴더에 grafana-token.yml이라는 파일을 만드세요.

apiVersion: v1
kind: Secret
metadata:
  name: grafana-cloud-credentials
  namespace: '<GRAFANA_OPERATOR_NAMESPACE>'
stringData:
  GRAFANA_CLOUD_INSTANCE_TOKEN: '<GRAFANA_API_KEY>'
type: Opaque

플레이스홀더를 사용자의 값으로 바꾸세요:

  • <GRAFANA_API_KEY>: Grafana 인스턴스의 API 키. API 키를 만들려면 Grafana API 키 문서를 참고하세요.
  • <GRAFANA_OPERATOR_NAMESPACE>: Kubernetes 클러스터에서 grafana-operator가 배포된 네임스페이스

Grafana 커스텀 리소스 구성하기

Grafana Cloud 인스턴스에 대한 연결을 설정하세요. Git 저장소의 grafana 폴더에 grafana-cloud.yml이라는 파일을 만드세요.

apiVersion: grafana.integreatly.org/v1beta1
kind: Grafana
metadata:
  name: '<GRAFANA_CLOUD_STACK_NAME>'
  namespace: '<GRAFANA_OPERATOR_NAMESPACE>'
  labels:
    dashboards: '<GRAFANA_CLOUD_STACK_NAME>'
spec:
  external:
    url: https://<GRAFANA_CLOUD_STACK_NAME>.grafana.net/
    apiKey:
      name: grafana-cloud-credentials
      key: GRAFANA_CLOUD_INSTANCE_TOKEN

플레이스홀더를 사용자의 값으로 바꾸세요:

  • <GRAFANA_CLOUD_STACK_NAME>: Grafana Cloud 스택의 이름
  • <GRAFANA_OPERATOR_NAMESPACE>: Kubernetes 클러스터에서 grafana-operator가 배포된 네임스페이스

Git 저장소에 대시보드 추가하기

grafana 디렉터리에 dashboards라는 하위 폴더를 만드세요.

이 가이드에서는 세 개의 별도 대시보드를 만드는 방법을 보여줘요. 모든 대시보드 구성에서 플레이스홀더를 사용자의 값으로 바꾸세요:

  • <GRAFANA_CLOUD_STACK_NAME>: Grafana Cloud 스택의 이름
  • <GRAFANA_OPERATOR_NAMESPACE>: Kubernetes 클러스터에서 grafana-operator가 배포된 네임스페이스

간단한 대시보드 만들기

dashboards 폴더 아래에 simple-dashboard.yaml이라는 파일을 만드세요.

apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
  name: grafanadashboard-sample
  namespace: '<GRAFANA_OPERATOR_NAMESPACE>'
spec:
  resyncPeriod: 30s
  instanceSelector:
    matchLabels:
      dashboards: '<GRAFANA_CLOUD_STACK_NAME>'
  json: >
    {
    "id": null,
    "title": "Simple Dashboard",
    "tags": [],
    "style": "dark",
    "timezone": "browser",
    "editable": true,
    "hideControls": false,
    "graphTooltip": 1,
    "panels": [],
    "time": {
        "from": "now-6h",
        "to": "now"
    },
    "timepicker": {
        "time_options": [],
        "refresh_intervals": []
    },
    "templating": {
        "list": []
    },
    "annotations": {
        "list": []
    },
    "refresh": "5s",
    "schemaVersion": 17,
    "version": 0,
    "links": []
    }

ConfigMap에서 대시보드 만들기

dashboards 폴더 아래에 dashboard-from-cm.yaml이라는 파일을 만드세요.

apiVersion: v1
kind: ConfigMap
metadata:
  name: dashboard-definition
  namespace: <GRAFANA_OPERATOR_NAMESPACE>
data:
  json: >
    {
    "id": null,
    "title": "Simple Dashboard from ConfigMap",
    "tags": [],
    "style": "dark",
    "timezone": "browser",
    "editable": true,
    "hideControls": false,
    "graphTooltip": 1,
    "panels": [],
    "time": {
        "from": "now-6h",
        "to": "now"
    },
    "timepicker": {
        "time_options": [],
        "refresh_intervals": []
    },
    "templating": {
        "list": []
    },
    "annotations": {
        "list": []
    },
    "refresh": "5s",
    "schemaVersion": 17,
    "version": 0,
    "links": []
    }
---
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
  name: grafanadashboard-from-configmap
  namespace: '<GRAFANA_OPERATOR_NAMESPACE>'
spec:
  instanceSelector:
    matchLabels:
      dashboards: '<GRAFANA_CLOUD_STACK_NAME>'
  configMapRef:
    name: dashboard-definition
    key: json

Grafana.com에서 대시보드 만들기

dashboards 폴더 아래에 dashboard-from-id.yaml이라는 파일을 만드세요.

apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
  name: node-exporter-latest
  namespace: '<GRAFANA_OPERATOR_NAMESPACE>'
spec:
  instanceSelector:
    matchLabels:
      dashboards: '<GRAFANA_CLOUD_STACK_NAME>'
  grafanaCom:
    id: 1860

Git 저장소를 동기화하도록 ArgoCD 구성하기

모든 변경 사항을 Git에 커밋한 후 ArgoCD 사용자 인터페이스에 로그인하거나 CLI를 사용하세요.

ArgoCD 애플리케이션 만들기

UI 사용하기:

  1. New App으로 이동해 Git 저장소 세부 정보와 grafana 폴더 경로로 양식을 작성하세요.
  2. Directory Recurse를 활성화하세요.
  3. 동기화 정책을 Automatic으로 설정하세요.

CLI 사용하기:

argo-application.yaml이라는 애플리케이션 매니페스트를 준비하세요.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: Grafana
  namespace: '<ARGOCD_NAMESPACE>'
spec:
  destination:
    name: ''
    namespace: ''
    server: 'https://kubernetes.default.svc'
  source:
    path: '<PATH_TO_GRAFANA_FOLDER>'
    repoURL: '<GIT_REPO_URL>'
    targetRevision: HEAD
    directory:
      recurse: true
  sources: []
  project: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
    retry:
      limit: 2
    backoff:
      duration: 5s
      maxDuration: 3m0s
      factor: 2

플레이스홀더를 사용자의 값으로 바꾸세요:

  • <GIT_REPO_URL>: Git 저장소의 URL
  • <PATH_TO_GRAFANA_FOLDER>: 저장소에 있는 grafana 폴더의 경로
  • <ARGOCD_NAMESPACE>: Kubernetes 클러스터에서 ArgoCD가 배포된 네임스페이스

ArgoCD에서 애플리케이션을 만드세요.

kubectl apply -f argo-application.yaml

ArgoCD에서 동기화 상태 확인하기

  1. 새로 만든 ArgoCD 애플리케이션을 모니터링해 대시보드 구성을 성공적으로 동기화하는지 확인하세요.
  2. ArgoCD 대시보드를 방문해 동기화 상태를 확인하세요. 성공하면 Grafana 대시보드가 Git 저장소의 구성과 최신 상태로 유지되어야 해요.

대시보드 업데이트하기

기존 대시보드를 업데이트하려면:

  1. Git 저장소에서 대시보드 JSON 구성을 변경하세요.
  2. 변경 사항을 커밋하고 푸시하세요.
  3. ArgoCD가 업데이트를 감지하고 커스텀 리소스에 변경 사항을 동기화해요.
  4. 그러면 Grafana Operator가 변경 사항을 Grafana 인스턴스에 동기화해요.

대시보드 업데이트 검증하기

Grafana 대시보드에 로그인해 변경 사항이 적용됐는지 확인하세요. 대시보드 업데이트가 Grafana UI에 반영된 것을 확인할 수 있어야 해요.

다음 단계

ArgoCD와 Grafana Operator를 사용해 Grafana 대시보드를 관리하는 GitOps 워크플로를 성공적으로 설정했어요. 이제 대시보드가 버전 관리되며 여러 환경에 일관되게 배포될 수 있어요. 이 접근 방식은 관찰 가능성 대시보드를 관리하고 운영을 확장할 수 있는 신뢰할 수 있고 감사 가능한 방법을 제공해요.

Grafana Operator로 Grafana를 관리하는 방법을 더 배우려면:

추가 고려 사항

  • Grafana Operator의 Helm 차트를 ArgoCD를 사용해 설치해 GitOps로 설정을 관리할 수 있어요.
  • Grafana 폴더 및 기타 리소스에도 비슷한 설정을 적용할 수 있어요.