인프라스트럭처 as code로 Grafana Cloud 프로비저닝
인프라스트럭처 as code로 Grafana Cloud 프로비저닝 (Provision Grafana Cloud with Infrastructure as code)
Grafana Cloud에서는 as-code 도구를 사용해 코드로 리소스를 만들고 관리하며, 이를 자신의 사용 사례에 효율적으로 통합할 수 있어요. 이렇게 하면 코드를 검토하고, 재사용하고, 더 나은 워크플로우를 만들 수 있어요.
출처: 문서
본문
Grafana Cloud에서는 as-code 도구를 사용해 코드로 리소스를 만들고 관리하며, 이를 자신의 사용 사례에 효율적으로 통합할 수 있어요. 이렇게 하면 코드를 검토하고, 재사용하고, 더 나은 워크플로우를 만들 수 있어요.
Note
여기에 정의된 대부분의 도구들은 서로 함께 사용할 수 있어요.
Grafana Terraform provider
Grafana 관리자는 Grafana용 Terraform provider를 사용해 대시보드, 알림과 수집기(collector)를 관리하고, 합성 모니터링 프로브와 체크를 추가하고, 아이덴티티와 액세스를 관리하는 등의 작업을 할 수 있어요.
다음 예시는 대시보드를 만드는 Terraform 구성을 보여줘요:
resource "grafana_dashboard" "metrics" {
config_json = jsonencode({
title = "as-code dashboard"
uid = "ascode"
})
}
이 예시 대시보드는 대시보드만 만들고 패널이나 행은 추가하지 않아요. 시작하려면 Grafana Terraform provider 가이드를 참조하거나 Terraform Grafana Provider 문서를 확인해요.
누구에게 추천되나요? (Who is this recommended for?)
Grafana Terraform provider는 Grafana 외의 용도로 이미 Terraform을 사용하고 있는 사용자에게 가장 적합해요.
Grafana Cloud나 Grafana OSS 배포에서 Grafana 리소스 전체 생태계를 관리하려면, Grafana의 다른 as-code 솔루션보다 가장 많은 Grafana 리소스를 지원하므로 Terraform Grafana provider를 사용하는 게 가장 좋아요.
Grafana Fleet Management 사용자라면, Grafana Terraform provider는 수집기가 운영되기 전에 새 수집기를 미리 등록하거나, 서비스에 이미 등록된 수집기에 원격 속성을 추가하는 데 가장 잘 쓰여요.
알려진 제한 사항 (Known limitations)
대시보드 관리는 가장 간단한 과정이 아니에요. 검토하고 업데이트하기 어려울 수 있는 긴 JSON 파일을 다뤄야 하거든요. Grafonnet은 Terraform에서 사용할 수 있는 대시보드 JSON을 생성하는 데 도움을 줄 수 있지만, Grafonnet을 쓰려면 Jsonnet을 알아야 해요.
Grafana Ansible collection
구성 관리를 위한 리소스는 Grafana용 Ansible collection을 통해 Grafana에서 사용할 수 있어요. Grafana Ansible collection은 폴더, 클라우드 스택, 대시보드를 포함한 다양한 리소스를 관리하는 데 사용할 수 있어요. Grafana의 HTTP API를 사용해 Grafana 리소스를 관리하는 Ansible 플레이북을 작성하면, 현재 Grafana Ansible collection에 포함되지 않은 Grafana 리소스도 프로그래밍 방식으로 관리할 수 있어요.
다음 예시는 대시보드를 만드는 Ansible 구성을 보여줘요:
- name: dashboard as code
grafana.grafana.dashboard:
dashboard: { 'title': 'as-code dashboard', 'uid': 'ascode' }
stack_slug: '{{ stack_slug }}'
grafana_api_key: '{{ grafana_api_key }}'
state: present
이 예시 대시보드는 대시보드만 만들고 패널이나 행은 추가하지 않아요.
시작하려면 Grafana Ansible Collection 퀵스타트 가이드를 참조하거나 컬렉션 문서를 확인해요.
누구에게 추천되나요? (Who is this recommended for?)
Terraform처럼 Grafana Ansible collection도 Grafana 외의 용도로 이미 Ansible을 사용하고 있는 사람들에게 가장 적합해요. 이 collection은 지금은 Grafana Cloud에서만 동작하므로, Ansible로 리소스를 관리하려는 Grafana Cloud 고객에게 가장 적합해요.
알려진 제한 사항 (Known limitations)
Grafana Ansible collection은 Grafana Cloud에서만 동작하며 API 키, 클라우드 스택, 플러그인, 대시보드, 폴더, 데이터 소스, 알림 연락처 포인트, 알림 정책 등 8개 리소스만 지원해요. Ansible로 Grafana 리소스 전체 생태계를 코드로 관리하려면 이는 단점이 될 수 있어요. Terraform처럼 대시보드 구축도 까다로운 과정이에요.
Grafana Operator
Grafana Operator는 Kubernetes operator로, Custom Resource를 통해 Kubernetes 안에서 Grafana 인스턴스와 관련 리소스를 프로비저닝하고 관리·운영할 수 있어요. 이 Kubernetes 네이티브 도구는 대시보드, 데이터 소스, 폴더 관리를 포함한 Grafana 관리를 쉽게 해줘요. 또한 Kubernetes Custom Resource와 Grafana 인스턴스의 실제 리소스를 자동으로 동기화해요. 그리고 대시보드 구성을 코드로 매끄럽게 처리하기 위해 Grafonnet을 활용해 Grafana 대시보드 정의를 생성하는 것도 지원해요.
시작하려면 Grafana Operator 퀵스타트 가이드를 참조하거나 Grafana Operator 문서를 확인해요.
Grafana operator로 대시보드를 만드는 Kubernetes 구성 샘플은 다음과 같아요:
apiVersion: integreatly.org/v1alpha1
kind: GrafanaDashboard
metadata:
name: simple-dashboard
labels:
app: grafana
spec:
instanceSelector:
matchLabels:
dashboards: <Grafana-custom-resource-name>
json: >
{
"title": "as-code dashboard",
"uid" : "ascode"
}
누구에게 추천되나요? (Who is this recommended for?)
Grafana Operator는 특히 다음에 적합해요:
- Kubernetes 클러스터 생태계 안에서 Grafana 리소스를 관리하는 통합 솔루션을 찾는 팀.
- GitOps 방식을 사용해 Grafana 구성을 코드로 취급하고, 버전 관리와 자동화된 배포를 위해 애플리케이션 매니페스트와 함께 저장하는 팀.
알려진 제한 사항 (Known limitations)
Grafana Operator는 Kubernetes에서 Grafana와 그 리소스를 운영하는 많은 부분을 단순화하지만, 현재 지원은 주로 대시보드, 폴더, 데이터 소스 관리에 집중돼 있어요. 알림과 플러그인(OSS에서만 동작) 같은 고급 기능은 아직 지원되지 않아요.
Grafana Crossplane provider
Grafana Crossplane provider는 Terrajet으로 구축되었으며 Grafana Terraform provider가 지원하는 모든 리소스를 지원해요. 이를 통해 사용자는 Grafana 리소스를 Kubernetes 매니페스트로 정의할 수 있고, ArgoCD 같은 도구로 Kubernetes 매니페스트를 중심으로 GitOps 파이프라인을 구축하는 사용자에게도 도움이 돼요.
Grafana Crossplane provider를 시작하려면 Kubernetes 클러스터에 Crossplane을 설치하고 다음 명령으로 provider를 설치해요:
kubectl crossplane install provider grafana/crossplane-provider-grafana:v0.1.0
Provider 설치 중에 Terraform provider가 지원하는 모든 리소스에 대한 CRD가 클러스터에 추가되어, 사용자는 Grafana 리소스를 Kubernetes custom resource로 정의할 수 있어요. Crossplane provider는 custom resource 정의에 있는 내용이 Grafana UI에 표시되는 내용임을 보장해요. UI에서 직접 어떤 변경을 하더라도 provider가 다시 동기화할 때 그 변경은 폐기돼요. 이렇게 하면 클러스터에서 코드로 정의한 내용이 Grafana 리소스의 진실의 원천(source of truth)이 됨을 보장해요.
시작하려면 Grafana Crossplane 저장소의 예시 폴더를 참조해요.
다음 예시는 대시보드를 만드는 Kubernetes custom resource 정의를 보여줘요:
apiVersion: grafana.jet.crossplane.io/v1alpha1
kind: Dashboard
metadata:
name: as-code-dashboard
spec:
forProvider:
configJson: |
{
"title": "as-code dashboard",
"uid": "ascode"
}
providerConfigRef:
name: grafana-crossplane-provider