04. 실전 대시보드 제작 기초 (Metrics & Logs)

학습 목표: Grafana에서 처음부터 대시보드를 만들고 Prometheus 메트릭과 Loki 로그를 함께 시각화하는 방법을 익힙니다. 실습 환경: Kubernetes Cluster, Grafana, Prometheus, Loki


🏗️ 1. 대시보드의 기본 구조

Grafana 대시보드는 **Rows(행)**와 **Panels(패널)**로 구성됩니다.

  • Panel: 데이터를 시각화하는 기본 단위 (그래프, 게이지, 로그, 텍스트 등)
  • Row: 패널들을 그룹화하고 접고 펼칠 수 있는 논리적 구획

우리는 오늘 “Demo App Monitoring” 대시보드를 만들며 다음 핵심 패널들을 직접 구현해볼 것입니다.

  1. 📈 CPU/Memory: 시계열 그래프 (Time Series)
  2. 🌡️ Resource Usage: 현재 상태 게이지 (Gauge)
  3. 📜 Logs: 실시간 로그 스트림 (Logs)
  4. 🚨 Error Count: 주요 지표 강조 (Stat)

📝 2. 새 대시보드 생성

  1. Grafana 왼쪽 메뉴에서 Dashboards 아이콘 클릭 → NewNew Dashboard
  2. Add visualization 버튼 클릭

📊 3. Prometheus 메트릭 시각화 (Time Series)

첫 번째로, 클러스터 노드의 CPU 사용률을 시간에 따라 흐르는 선 그래프로 그려봅시다.

3-1. 쿼리 작성 (Query)

  • Data source: Prometheus 선택
  • Query:
    # 전체 CPU 사용률 계산 (Idle 제외)
    100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) * 100)
    • rate(..[1m]): 최근 1분간의 변화율
    • mode="idle": 유휴 상태(놀고 있는 상태)
    • 100 - ...: 100에서 유휴 상태를 빼서 실제 사용률을 구함

3-2. 시각화 설정 (Panel options)

오른쪽 패널 옵션에서 다음 설정을 변경합니다.

  • Title: Cluster Node CPU Usage
  • Visualization: Time series
  • Unit: Misc > Percent (0-100)
  • Min: 0 / Max: 100 (Y축 고정)

3-3. 저장 (Apply)

우측 상단 Apply 버튼을 눌러 대시보드에 추가합니다.


🌡️ 4. 현재 상태 시각화 (Gauge)

이번에는 시계열이 아닌, “현재” 메모리 사용량을 자동차 속도계처럼 보여주는 Gauge 패널을 만듭니다.

4-1. 패널 추가

대시보드 상단 Add 버튼 → Visualization

4-2. 쿼리 작성

  • Data source: Prometheus
  • Query:
    # 메모리 사용률 계산
    (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

4-3. 시각화 설정

  • Visualization: Gauge 선택
  • Title: Memory Usage
  • Unit: Percent (0-100)
  • Thresholds (임계값 색상):
    • 80%: Yellow (주의)
    • 90%: Red (위험) → 값이 높아지면 자동으로 색상이 변합니다!

📜 5. 실시간 로그 통합 (Logs)

메트릭만으로는 “왜” 문제가 발생했는지 알기 어렵습니다. Loki를 연동하여 로그를 바로 확인해봅시다.

5-1. 패널 추가

AddVisualization

5-2. 쿼리 작성

  • Data source: Loki 선택
  • Query:
    {app="log-generator"}
    (참고: 03강에서 배포한 log-generator 파드의 로그를 조회합니다)

5-3. 시각화 설정

  • Visualization: Logs 선택
  • Title: Live Application Logs
  • Log styles: Prettify JSON (가독성 향상)

🚨 6. 핵심 지표 강조 (Stat)

최근 5분 동안 발생한 ERROR 로그의 개수를 큼지막한 숫자로 표시하여 경각심을 줍시다.

6-1. 패널 추가

AddVisualization

6-2. 쿼리 작성 (LogQL Aggregation)

  • Data source: Loki
  • Query:
    # ERROR 문자열이 포함된 로그의 개수 집계
    sum(count_over_time({app="log-generator"} |= "ERROR" [5m]))

6-3. 시각화 설정

  • Visualization: Stat 선택
  • Title: Error Count (Last 5m)
  • Color mode: Background (배경색 변경)
  • Thresholds:
    • 1: Blue (발생 시작)
    • 10: Red (심각)

💾 7. 대시보드 저장 및 정리

  1. 배치 조정: 패널의 모서리를 드래그하여 크기를 조절하고 원하는 위치로 옮깁니다.
    • 추천 배치: 상단에 StatGauge, 중간에 Time Series, 하단에 넓게 Logs.
  2. 저장: 우측 상단 디스켓 아이콘(💾) 클릭.
    • Name: 04 - My First Integrated Dashboard
    • Save 클릭.

🎯 요약 및 다음 단계

이제 여러분은 Prometheus의 메트릭Loki의 로그를 한 화면에서 볼 수 있는 강력한 기초 대시보드를 가졌습니다.

하지만 현재 대시보드는 모든 노드와 모든 파드의 데이터를 보여줍니다. 특정 노드나 파드만 골라서 보고 싶다면 어떻게 해야 할까요? 쿼리를 매번 수정해야 할까요?

다음 장인 **05_동적_대시보드와_변수_활용**에서 드롭다운 메뉴 하나로 대시보드를 자유자재로 필터링하는 방법을 배웁니다.