Grafana — 모니터링 시각화의 시작

한소연·2026년 4월 14일

내일배움캠프

목록 보기
18/21
post-thumbnail

Prometheus로 메트릭을 수집했다면, 이제 그 데이터를 눈에 보이는 정보로 만들 차례입니다.
Grafana는 단순한 그래프 툴이 아니라, 시스템의 상태를 한눈에 파악하게 해주는 관측 플랫폼입니다.


1. Grafana란?

Grafana는 다양한 데이터 소스로부터 메트릭, 로그, 트레이스를 수집하여 대시보드로 시각화하는 오픈소스 플랫폼입니다.

현재 여러분의 환경처럼 Prometheus + Grafana 조합은 백엔드 모니터링에서 가장 널리 사용되는 표준 스택입니다.

데이터 흐름

[ 애플리케이션 ]
     ↓ 메트릭 노출 (/actuator/prometheus)
[ Prometheus ]  ← 주기적으로 스크래핑(Scraping)
     ↓ 데이터 소스로 연결
[  Grafana   ]  → 대시보드로 시각화
     ↓
[ 브라우저에서 확인 ]

2. Grafana 핵심 개념

본격적으로 활용하기 전에 반드시 알아야 할 개념들입니다.

데이터 소스 (Data Source)

Grafana가 데이터를 가져오는 연결 대상입니다.
현재 여러분이 연결한 Prometheus가 바로 데이터 소스입니다.

Grafana는 Prometheus 외에도 다양한 데이터 소스를 지원합니다.

데이터 소스용도
Prometheus메트릭 (현재 연결 중)
Loki로그
Tempo분산 트레이싱
MySQL / PostgreSQLDB 데이터
Elasticsearch로그 / 검색

💡 Prometheus(메트릭) + Loki(로그) + Tempo(트레이싱) 조합을 PLG 스택 또는 Grafana LGTM 스택이라고 부르며, 완전한 관측 가능성(Observability)을 구현할 수 있습니다.


대시보드 (Dashboard)

여러 개의 패널을 모아 하나의 화면으로 구성한 모니터링 뷰입니다.

대시보드 구조

┌─────────────────────────────────────────┐
│           My Service Dashboard           │
├──────────────┬──────────────┬────────────┤
│  CPU 사용률   │  메모리 사용률 │  요청 수    │
│  [그래프]     │  [게이지]      │  [숫자]    │
├──────────────┴──────────────┴────────────┤
│         HTTP 응답 시간 (Time Series)      │
│  [────────────────────────────────────]  │
├──────────────────────────────────────────┤
│         에러율 (%)                        │
│  [────────────────────────────────────]  │
└──────────────────────────────────────────┘

패널 (Panel)

대시보드를 구성하는 개별 시각화 단위입니다.
각 패널은 하나의 쿼리(PromQL)와 하나의 시각화 타입으로 구성됩니다.

패널 타입언제 사용하나
Time Series시간에 따른 변화 추이 (CPU, 메모리, 응답 시간)
Gauge현재 값의 비율/상태 (사용률 %)
Stat단일 숫자 강조 표시 (총 요청 수, 에러 수)
Bar Chart항목별 비교
Table상세 데이터 표 형태로 표시
Logs로그 출력 (Loki 연동 시)
Heatmap분포도 (응답 시간 히트맵)

PromQL (Prometheus Query Language)

Grafana에서 Prometheus 데이터를 조회할 때 사용하는 쿼리 언어입니다.
패널을 만들 때 반드시 PromQL을 작성해야 합니다.

자주 쓰는 PromQL 패턴

# JVM 힙 메모리 사용률 (Spring Boot)
jvm_memory_used_bytes{area="heap"} / jvm_memory_max_bytes{area="heap"} * 100

# 초당 HTTP 요청 수
rate(http_server_requests_seconds_count[1m])

# HTTP 에러율 (5xx)
rate(http_server_requests_seconds_count{status=~"5.."}[1m])
  / rate(http_server_requests_seconds_count[1m]) * 100

# 평균 응답 시간
rate(http_server_requests_seconds_sum[1m])
  / rate(http_server_requests_seconds_count[1m])

# CPU 사용률
rate(process_cpu_seconds_total[1m]) * 100

3. 다음 프로젝트에서 꼭 구성해야 할 대시보드

📊 기본 대시보드 구성 (Spring Boot 기준)

실제 프로젝트에서 가장 먼저 만들어야 할 패널 목록입니다.

시스템 리소스

패널명타입PromQL 핵심 키워드
CPU 사용률Time Seriesprocess_cpu_seconds_total
JVM 힙 메모리 사용량Gaugejvm_memory_used_bytes
스레드 수Statjvm_threads_live_threads
GC 횟수/시간Time Seriesjvm_gc_pause_seconds

HTTP 트래픽

패널명타입PromQL 핵심 키워드
초당 요청 수 (RPS)Time Serieshttp_server_requests_seconds_count
평균 응답 시간Time Serieshttp_server_requests_seconds_sum/count
HTTP 상태 코드 분포Bar Charthttp_server_requests_seconds_count
에러율 (5xx %)Statstatus=~"5.." 필터링

데이터베이스 (HikariCP 커넥션 풀)

패널명타입PromQL 핵심 키워드
활성 커넥션 수Gaugehikaricp_connections_active
대기 중인 커넥션 수Time Serieshikaricp_connections_pending
커넥션 획득 시간Time Serieshikaricp_connections_acquire_seconds

4. 알림 설정 (Alerting)

Grafana는 단순 시각화를 넘어, 이상 징후를 감지하면 자동으로 알림을 보낼 수 있습니다.
다음 프로젝트에서 반드시 설정해야 할 기능입니다.

알림 구성 요소

Alert Rule (임계값 조건 정의)
     ↓ 조건 충족 시
Contact Point (알림 수신 채널)
     ↓
Slack / Email / PagerDuty / Discord 등으로 알림 발송

알림 설정 예시 — 에러율 5% 초과 시 Slack 알림

# Grafana Alert Rule 설정 (UI에서 설정)

Alert 이름  : [WARN] HTTP 에러율 5% 초과
쿼리        : rate(http_server_requests_seconds_count{status=~"5.."}[5m])
              / rate(http_server_requests_seconds_count[5m]) * 100
조건        : IS ABOVE 5      ← 5% 초과 시 발동
평가 주기   : every 1m
알림 채널   : Slack #alert-channel

설정해두면 좋은 알림 규칙

알림명조건심각도
에러율 급증HTTP 5xx 에러율 > 5%🔴 Critical
응답 시간 저하평균 응답 시간 > 2초🟠 Warning
메모리 부족JVM 힙 사용률 > 85%🟠 Warning
DB 커넥션 고갈활성 커넥션 수 > 최대치의 90%🔴 Critical
인스턴스 다운up == 0🔴 Critical

5. 대시보드 공유 및 템플릿 활용

처음부터 대시보드를 직접 만들 필요가 없습니다.
Grafana 공식 대시보드 공유 사이트(Grafana Labs)에서 검증된 템플릿을 가져와서 활용할 수 있습니다.

Grafana Dashboard 가져오기

Grafana UI
└── Dashboards → Import
    └── Dashboard ID 입력 or JSON 파일 업로드

추천 대시보드 ID

대시보드명ID용도
Spring Boot 2.1 Statistics11378Spring Boot 전용 종합 대시보드
JVM (Micrometer)4701JVM 메트릭 상세 모니터링
Node Exporter Full1860서버 OS 리소스 모니터링
Kubernetes Cluster7249k8s 클러스터 모니터링

💡 https://grafana.com/grafana/dashboards 에서 다양한 템플릿을 검색할 수 있습니다.


6. 변수(Variables) 활용 — 동적 대시보드 만들기

여러 서비스나 인스턴스가 있을 때, 드롭다운으로 필터링이 가능한 동적 대시보드를 만들 수 있습니다.

대시보드 상단에 드롭다운 변수 추가

[ 서비스: order-service ▼ ]  [ 인스턴스: 10.0.0.1:8080 ▼ ]

→ 선택한 서비스/인스턴스의 메트릭만 표시

변수 설정 예시

Variables 설정 (Dashboard Settings → Variables)

변수명  : service
타입    : Query
쿼리    : label_values(up, job)    ← Prometheus에서 job 목록 가져오기

패널 쿼리에서 $service 로 참조:

rate(http_server_requests_seconds_count{job="$service"}[1m])

7. Grafana 활용 로드맵

현재 상태에서 단계적으로 발전시키는 방향을 정리했습니다.

[ 현재 ] Prometheus + Grafana 연동 완료 ✅

    ↓ Step 1
기본 대시보드 구성
└── CPU / 메모리 / HTTP 트래픽 / DB 커넥션 패널 추가

    ↓ Step 2
알림(Alerting) 설정
└── 에러율, 응답 시간, 인스턴스 다운 알림 → Slack 연동

    ↓ Step 3
동적 대시보드
└── Variables로 서비스/환경(dev, prod)별 필터링

    ↓ Step 4 (심화)
로그 연동 (Loki)
└── 메트릭과 로그를 같은 대시보드에서 연결해서 확인

    ↓ Step 5 (심화)
분산 트레이싱 (Tempo)
└── 특정 요청의 전체 처리 흐름을 추적

8. 정리

Grafana 핵심 개념
├── 데이터 소스  →  Prometheus, Loki, DB 등 연결 대상
├── 대시보드     →  여러 패널을 모아 구성한 모니터링 화면
├── 패널         →  개별 시각화 단위 (그래프, 게이지, 숫자 등)
└── PromQL       →  Prometheus 데이터를 조회하는 쿼리 언어

다음 프로젝트 필수 구성
├── 시스템 리소스 대시보드  (CPU, 메모리, GC, 스레드)
├── HTTP 트래픽 대시보드    (RPS, 응답 시간, 에러율)
├── DB 커넥션 대시보드      (HikariCP 모니터링)
└── Alerting 설정           (에러율/응답시간 임계값 알림)

활용 팁
├── Grafana Labs에서 검증된 템플릿 Import해서 빠르게 시작
├── Variables로 서비스/환경별 동적 필터링
└── 장기적으로 Loki(로그) + Tempo(트레이싱) 추가하여
    완전한 Observability 구현

참고 용어 정리

용어설명
메트릭 (Metric)시스템 상태를 수치로 표현한 데이터 (CPU 사용률, 요청 수 등)
스크래핑 (Scraping)Prometheus가 주기적으로 서비스에서 메트릭을 수집하는 동작
PromQLPrometheus 전용 쿼리 언어
RPS (Requests Per Second)초당 요청 수
Observability (관측 가능성)메트릭 + 로그 + 트레이싱으로 시스템 내부 상태를 파악하는 능력
HikariCPSpring Boot 기본 DB 커넥션 풀 라이브러리
LokiGrafana Labs에서 만든 로그 수집/저장 시스템
TempoGrafana Labs에서 만든 분산 트레이싱 시스템
Contact PointGrafana 알림이 발송될 채널 (Slack, Email 등)
profile
안 되면 될 때까지

0개의 댓글