Grafana

Grafana는 Prometheus에 저장된 메트릭을 시각화 대시보드로 구성하고, Alertmanager와 역할을 분담하는 모니터링 스택의 시각화 계층이다.[1] 이 페이지가 답하는 질문은 Prometheus 메트릭을 어떻게 대시보드로 구성하는지, Grafana와 Alertmanager의 역할이 어떻게 나뉘는지다.

데이터소스 → 패널 → 대시보드

Grafana는 데이터소스(이 강의에서는 Prometheus[1:1]; 공식 문서는 Prometheus, Loki, SQL database 등 저장 backend 연결로 설명[2])에서 데이터를 가져와 패널(그래프/게이지/표) 단위로 시각화하고, 여러 패널을 대시보드로 묶는다. 변수(Variable)로 서버를 동적으로 선택할 수 있고, 자동 프로비저닝으로 데이터소스·대시보드 JSON을 코드로 관리할 수 있다.[1:2]

flowchart LR
  Prom["Prometheus
TSDB"] DS["Grafana
Data Source"] Panel["Panel
PromQL 쿼리"] Dash["Dashboard"] Prom --> DS --> Panel --> Dash
요소 설명
Data Source Grafana가 query하는 저장 backend 연결 — 이 monitoring stack에서는 Prometheus[1:3]
Panel 그래프/게이지/표 등 시각화 단위[1:4]
Dashboard 여러 패널을 묶은 화면[1:5]
Variable 대시보드 필터 (서버 선택 등)[1:6]
Alerting Grafana 자체 알림 기능 (단, 기본 알림은 Alertmanager 권장)[1:7]

데이터소스 등록과 대시보드 구성

자동 프로비저닝(datasources + dashboards)을 쓰면 UI 클릭 없이 코드로 데이터소스와 대시보드를 재현할 수 있어 마이그레이션과 GitOps 구성에 유리하다고 보인다.

자주 쓰는 패널 쿼리

# CPU (graph)
100 - (avg by (instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

# Memory (gauge)
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

# Disk % (bar gauge)
(1 - node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"}
      / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}) * 100

# Container CPU Top 5
topk(5, sum by (container)(rate(container_cpu_usage_seconds_total{container!=""}[5m])) * 100)

# API Health (stat)
probe_success{instance="api"}

# API Latency P95 (graph)
histogram_quantile(0.95, sum by (le)(rate(http_request_duration_seconds_bucket[5m])))

변수(Variable) 패턴

대시보드 변수 설정은 instance 변수를 label_values(node_cpu_seconds_total, instance) 쿼리로 정의하고, 패널 쿼리에서 instance="$instance" 형태로 사용한다.[6]

# 변수 정의
Name: instance
Type: Query
Query: label_values(node_cpu_seconds_total, instance)

패널 쿼리에서 사용:

100 - (avg by (instance)(rate(node_cpu_seconds_total{mode="idle", instance="$instance"}[5m])) * 100)

대시보드 상단 드롭다운으로 instance를 선택하면 패널이 동적으로 필터된다. Variable은 dashboard query만의 치환 변수가 아니다 — panel title·link 등 다른 dashboard element에도 사용할 수 있으며, 값이 바뀌면 이를 참조하는 element가 함께 갱신된다. 따라서 같은 구조의 dashboard를 환경·instance별로 복제하는 대신, source schema에 맞는 variable query를 둔다.

Grafana와 Alertmanager의 역할 분담

Grafana는 "데이터를 보여주는" 역할만 담당하고, "데이터를 수집/저장"하는 Prometheus와 "알림을 발송"하는 Alertmanager와 명확히 역할이 분리된다. 이 분리를 지키면 Grafana 장애가 모니터링 시스템 전체로 번지지 않는다고 볼 수 있다.

실행 체크리스트

흔한 실수

datasource provisioning, dashboard JSON, panel query는 source의 Prometheus endpoint와 metric label을 전제로 한 운영 예시다. Grafana는 metric을 수집하거나 alert delivery를 담당하지 않는다 — 저장된 metric을 query·visualize하는 reader 역할이다.

관련

출처

테스트 질문


  1. Grafana.md — Grafana의 목적(메트릭 시각화·대시보드 생성·알림 설정)과 핵심 개념 요약 표 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  2. grafana-datasources.md — "A data source in Grafana is a connection to a storage backend that holds your data, such as a Prometheus server, a Loki instance, a SQL database, or a cloud monitoring service."(L5) ↩︎

  3. Grafana.md — 데이터소스 등록(UI/자동 프로비저닝 yaml) ↩︎ ↩︎

  4. Grafana.md — 기본 대시보드 템플릿 구조와 "대시보드 가져오기" ID 표 ↩︎ ↩︎

  5. Grafana.md — 자동 배포용 대시보드 JSON 저장 방식 ↩︎

  6. Grafana.md — 대시보드 변수(서버 선택 기능) 표 ↩︎

  7. Grafana.md — Grafana Alert 사용 여부, "알림은 Alertmanager만 사용 — 추천 구조" ↩︎

  8. Grafana.md — 인증/보안 표 ↩︎