Grafana Operator로 폴더, 데이터 소스, 대시보드 관리

Grafana Operator로 폴더, 데이터 소스, 대시보드 관리 (Manage folders, data sources, and dashboards using the Grafana Operator)

이 가이드는 Grafana Operator를 사용해 데이터 소스, 폴더, 대시보드를 관리하는 방법을 보여줘요. Kubernetes 커스텀 리소스로 이 리소스들을 선언적으로 만들 거예요.

출처: 문서

본문

이 가이드는 Grafana Operator를 사용해 데이터 소스, 폴더, 대시보드를 관리하는 방법을 보여줘요. Kubernetes 커스텀 리소스로 이 리소스들을 선언적으로 만들 거예요.

사전 요구 사항 (Prerequisites)

시작하기 전에 다음이 있는지 확인해요:

  • 기존 Grafana Cloud 스택
  • Grafana Operator 설치에 표시된 대로 클러스터에 설치된 Grafana Operator

Grafana Operator 설정 (Set up the Grafana Operator)

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

Grafana API 토큰 시크릿 만들기 (Create the Grafana API Token Secret)

grafana-token.yml이라는 파일에 다음 내용으로 Grafana API 토큰을 시크릿에 저장해요:

YAML

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 Key 문서를 참고해요.
  • <GRAFANA_OPERATOR_NAMESPACE>: Kubernetes 클러스터에서 grafana-operator가 배포된 네임스페이스.

Grafana 커스텀 리소스 구성 (Configure the Grafana Custom Resource)

Grafana Cloud 인스턴스에 대한 연결을 설정해요. grafana-cloud.yml이라는 파일을 만들어요:

YAML

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가 배포된 네임스페이스.

데이터 소스 추가 (Add a data source)

Note 이 예제는 Prometheus 데이터 소스를 사용해요. 선택한 데이터 소스에 따라 필요한 인자가 달라진다는 점을 참고해요.

데이터 소스 구성 만들기 (Create a data source configuration)

데이터 소스 구성을 담은 새 YAML 파일 datasource.yml을 만들고 저장해요:

YAML

apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDatasource
metadata:
  name: '<DATA_SOURCE_NAME>'
  namespace: '<GRAFANA_OPERATOR_NAMESPACE>'
spec:
  instanceSelector:
    matchLabels:
      dashboards: '<GRAFANA_CLOUD_STACK_NAME>'
  allowCrossNamespaceImport: true
  datasource:
    access: proxy
    database: prometheus
    jsonData:
      timeInterval: 5s
      tlsSkipVerify: true
    name: '<DATA_SOURCE_NAME>'
    type: prometheus
    url: '<DATA_SOURCE_URL>'

플레이스홀더를 자신의 값으로 바꿔요:

  • <DATA_SOURCE_NAME>: Grafana에 추가할 데이터 소스의 이름.
  • <DATA_SOURCE_URL>: 데이터 소스의 URL.
  • <GRAFANA_CLOUD_STACK_NAME>: Grafana Cloud 스택의 이름.
  • <GRAFANA_OPERATOR_NAMESPACE>: Kubernetes 클러스터에서 grafana-operator가 배포된 네임스페이스.

폴더에 대시보드 추가 (Add a dashboard to a folder)

다음 YAML 정의를 사용해 커스텀 폴더 아래 Grafana 인스턴스에 간단한 대시보드를 만들어요. spec.folder 필드에 정의된 폴더가 존재하지 않으면 operator가 대시보드를 폴더 안에 배치하기 전에 폴더를 만들어요.

대시보드 구성을 준비해요. dashboard.yml에서 대시보드를 정의하고 폴더에 할당해요:

YAML

apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
  name: '<FOLDER_NAME>'
  namespace: '<GRAFANA_OPERATOR_NAMESPACE>'
spec:
  instanceSelector:
    matchLabels:
      dashboards: '<GRAFANA_CLOUD_STACK_NAME>'
  folder: '<FOLDER_NAME>'
  json: >
    {
      "title": "as-code dashboard",
      "uid" : "ascode"
    }

플레이스홀더를 자신의 값으로 바꿔요:

  • <FOLDER_NAME>: 대시보드를 만들고 싶은 폴더의 이름.
  • <GRAFANA_CLOUD_STACK_NAME>: Grafana Cloud 스택의 이름.
  • <GRAFANA_OPERATOR_NAMESPACE>: Kubernetes 클러스터에서 grafana-operator가 배포된 네임스페이스.

Kubernetes 매니페스트 적용 (Apply the Kubernetes manifests)

터미널에서 위의 모든 Kubernetes YAML 정의가 있는 디렉터리에서 다음 명령어를 실행해요.

모든 구성에 대한 Kubernetes 커스텀 리소스를 만들어요:

sh

kubectl apply -f grafana-token.yml grafana-cloud.yml datasource.yml dashboard.yml

구성 검증 (Validate your configuration)

구성을 적용한 뒤 다음을 확인해요:

  • Grafana에 새 데이터 소스가 보이는지. 다음 이미지에서 InfluxDB라는 데이터 소스가 생성되었어요.
  • Grafana에 새 대시보드와 폴더가 생성되었는지. 다음 이미지에서 Demos 폴더 안에 InfluxDB Cloud Demos라는 대시보드가 생성되었어요.

다음 단계 (Next steps)

Grafana Operator를 사용해 데이터 소스, 폴더, 대시보드를 성공적으로 만들었어요. 이제 Grafana 리소스가 Kubernetes 커스텀 리소스를 통해 선언적으로 관리돼요.

Grafana 관리에 대해 더 배우려면:

더 알아보기 (Learn more)