본문 바로가기
카테고리 없음

Observability as Code 끝판왕 가이드: Grafana Terraform Provider vs. Grafana HTTP API

by frontier12 2025. 5. 28.




서론: 왜 Observability도 코드로 관리해야 하는가
• 버전 관리: 대시보드·알람·데이터소스를 Git으로 관리
• 협업 효율화: 모니터링 구성 변경도 PR 리뷰 후 머지
• 프로비저닝 자동화: 신규 서비스 배포 시 자동으로 메트릭 시각화 구성
• 환경 일관성 확보: Dev/Stage/Prod 환경 간 대시보드 편차 제거
• DR 및 재해복구에 강함: 모니터링 스택도 코드로 복원 가능

이제는 Observability as Code 시대입니다. 특히 Grafana를 중심으로 Terraform Provider와 Grafana HTTP API를 활용한 두 가지 전략이 현업에서 많이 사용됩니다. 실리콘밸리·심천 개발팀은 두 접근법을 하이브리드로 병행하기도 하며, 상황에 맞춰 유연하게 선택합니다.



접근 방식 1: Grafana Terraform Provider

특징
• 공식 지원 Terraform provider
• dashboard, data_source, alert, folder 등 대부분 자원 관리
• HCL로 정의된 구조 → 가독성 높고 유지보수 쉬움
• GitOps에 최적화

예제

provider "grafana" {
  url  = "https://grafana.example.com"
  auth = var.grafana_api_key
}

resource "grafana_dashboard" "service_metrics" {
  config_json = file("${path.module}/dashboards/service.json")
  folder      = "Production"
  overwrite   = true
}

장점
• 코드 기반 구조화에 강함
• 변경 추적 및 모듈화 용이
• TeamCity, Atlantis 등과의 연동 탁월

단점
• 복잡한 UI 수정은 수작업 → JSON 수동 export
• 커스텀 Panel Plugin은 제한적



접근 방식 2: Grafana HTTP API 스크립트화

특징
• REST API로 모든 자원 동적 제어 가능
• Bash/Python으로 작성 가능
• UI에서 생성한 대시보드를 자동 추출하여 운영 자동화

예제 (Python)

import requests, json

headers = {
  "Authorization": "Bearer YOUR_API_KEY",
  "Content-Type": "application/json"
}

with open('dashboards/service.json') as f:
    payload = {
        "dashboard": json.load(f),
        "overwrite": True
    }

res = requests.post("https://grafana.example.com/api/dashboards/db",
                    headers=headers, data=json.dumps(payload))

print(res.status_code)

장점
• UI와 실시간 동기화 용이
• 자동 export/import 스크립트 구현 가능
• GitHub Actions 등과 연동 용이

단점
• 코드 관리 어려움 (JSON 구조 비직관적)
• 구조화된 선언형 구성 불가



하이브리드 전략: Best of Both Worlds

실제 운영 환경에서는 다음 방식으로 하이브리드 전략이 많이 채택됩니다:

리소스 종류 적용 방식 설명
대시보드 템플릿화 Terraform 모듈화해 GitOps에 최적화
빈번한 실험용 대시보드 HTTP API + GitHub Actions UI 기반 생성 → 자동 저장
Folder 구조화 Terraform 계층적 관리 필수
Alert rule Terraform or API 복잡성에 따라 선택




실전 적용 팁
1. Panel Reuse: 동일한 그래프 반복 시 JSON 내 파라미터 치환 스크립트 활용
2. Grafonnet-lib: Grafana JSON → Jsonnet DSL로 템플릿화
3. 다국어 대시보드 대응: panel.title에 {{ lang }} 바인딩
4. Grafana Dashboards Operator: Kubernetes CRD로 대시보드 자동 적용
5. Slack/Teams Alert 연동: Grafana Contact Point 설정도 Terraform 관리
6. Grafana OnCall 연동: PagerDuty 없이도 운영팀 알림 자동화



결론

Grafana 기반 모니터링 구성도 이제는 코드로 정의하고 자동화하는 시대입니다.
Terraform의 구조화된 관리와 HTTP API의 실시간 유연성을 적절히 혼합하면,
대시보드 품질은 올라가고 운영 부담은 대폭 줄어듭니다.

지금 이 순간에도 누군가는 .tf 파일 하나로 관측 환경 전체를 리셋하고 있습니다.
당신의 Grafana도 이제 코드로 다스리십시오.