⸻
서론: 왜 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도 이제 코드로 다스리십시오.
카테고리 없음