5.2 변수와 Provisioning
Instance마다 dashboard를 복사하면 panel 수정과 alert 링크가 곧 불일치합니다. Grafana variable로 하나의 dashboard를 재사용하고, datasource와 dashboard 정의를 Git에서 관리합니다.
Variable 계층
자주 사용하는 순서대로 변수를 둡니다.
environment → cluster → instance → datname
Prometheus label value를 조회하는 query variable 예시입니다.
label_values(pg_up, environment)
label_values(pg_up{environment="$environment"}, cluster)
label_values(pg_up{environment="$environment",cluster="$cluster"}, instance)
Panel query는 변수를 사용합니다.
sum by (datname) (
rate(pg_stat_database_xact_commit{
environment="$environment",
cluster="$cluster",
instance="$instance"
}[$__rate_interval])
)
$__rate_interval은 dashboard interval과 scrape 간격을 고려해 rate window를 정합니다. 사용자가 시간 범위를 바꿀 때 [1m] 같은 고정 window보다 안정적입니다.
Multi-value 주의
Variable에서 All이나 multi-value를 허용하면 equality matcher 대신 regex matcher를 사용합니다.
pg_up{instance=~"$instance"}
All을 선택한 상태에서 수천 instance나 database가 한꺼번에 그려지지 않도록 overview panel은 미리 집계하고, detail dashboard는 single selection을 강제합니다.
Dashboard link
Overview에서 PostgreSQL detail로 이동할 때 URL variable로 context를 넘깁니다.
/d/postgres-detail?var-environment=${environment}&var-cluster=${cluster}&var-instance=${instance}
Alert annotation에도 같은 변수를 넣으면 firing한 instance가 선택된 dashboard로 바로 이동할 수 있습니다.
Datasource provisioning
Lab에는 다음 파일이 포함되어 있습니다.
apiVersion: 1
datasources:
- name: Prometheus
uid: prometheus
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: true
editable: false
Grafana가 시작할 때 datasource를 생성하므로 개인 환경에서 손으로 반복 설정하지 않아도 됩니다.
Dashboard as code
Dashboard JSON과 provisioning YAML을 repository에 저장하면 다음 이점이 있습니다.
- 변경 diff와 reviewer를 남길 수 있음
- staging에서 확인한 dashboard를 production에 같은 형태로 배포
- UI에서 우연히 수정한 설정을 추적
- disaster recovery 때 빠르게 복원
Provisioned dashboard는 source file이 갱신될 때 UI 변경을 덮어쓸 수 있습니다. 실험용 Grafana에서 panel을 조정하고 JSON을 export한 뒤 Git에 반영하는 흐름을 정합니다.
UID를 고정한다
Datasource와 dashboard UID가 환경마다 달라지면 link와 alert가 깨집니다. Datasource에 uid: prometheus처럼 안정적인 값을 지정하고 dashboard UID도 repository에서 관리합니다.
배포 전 확인
- 모든 query가 선택한 variable 범위만 조회하는가?
- All 선택이 과도한 series를 만들지 않는가?
- datasource UID가 환경에서 동일한가?
- dashboard link가 현재 time range를 유지하는가?
- panel description에 metric 의미와 다음 조사 링크가 있는가?