본문으로 바로가기

서버 자원 수집 및 시각화

category n년차 개발자 2025. 4. 28. 12:39
반응형


이번 글에서는 서버 자원을 수집하고 시각화하는 방법에 대해 설명합니다. 
Node Exporter(데이터 제공) → Prometheus(수집,저장) → Grafana(시각화)
구조로 시스템을 구성하여 서버의 상태를 실시간으로 모니터링할 수 있는 환경을 만들 것입니다.

 

Node Exporter란?
리눅스 서버의 시스템 자원 메트릭을 수집하여 Prometheus가 가져갈 수 있도록 HTTP 엔드포인트(/metrics)로 노출해주는 Exporter입니다.

docker-compose.yml
version: '3'
services:
  node-exporter:
    image: prom/node-exporter
    container_name: node-exporter
    ports:
      - "9100:9100"

 

 

Metrics란?
메트릭은 시스템 상태나 성능을 수치화한 데이터입니다.
- CPU 사용률
- 메모리 사용량
- 디스크 I/O
- 네트워크 트래픽
이러한 메트릭을 수집하면 서버의 상태를 수치적으로 파악하고, 이상 징후를 탐지하거나 병목 원인을 분석하는 데 유용합니다.

 

metrics 데이터 구조

# HELP node_cpu_seconds_total Seconds the CPUs spent in each mode.
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="0",mode="user"} 1284.63
node_cpu_seconds_total{cpu="0",mode="system"} 432.11
node_memory_MemAvailable_bytes 514380800
node_disk_reads_completed_total{device="sda"} 109328

 

 

Prometheus란?

Prometheus는 시계열(Time-Series) 기반의 모니터링 시스템으로, Metrics 데이터를 Pull 방식으로 주기적으로 수집하여 저장합니다.

prometheus.yml
scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['node-exporter:9100']
version: '3'
services:
  prometheus:
    image: prom/prometheus
    network_mode: host
    volumes:
      - "${PWD}/prometheus:/etc/prometheus"
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.enable-lifecycle'

 

저장 위치
수집한 데이터는 내부 로컬 디스크에 시계열 DB 형식으로 저장됨 (TSDB)
기본적으로 /prometheus 디렉터리에 저장되며, 도커에서는 볼륨을 마운트하여 지속성 보장

저장 기간
기본 저장 기간은 15일
--storage.tsdb.retention.time 플래그로 조정 가능 (예: 30일)

 

Grafana란
Grafana는 Elasticsearch, Prometheus 등 다양한  저장소(Data Source)로부터 데이터를 받아 시각화하는 도구입니다.

version: '3'
services:
  grafana:
    image: grafana/grafana
    network_mode: host
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_USERS_ALLOW_SIGN_UP=false
    volumes:
      - "${PWD}/grafana_data:/var/lib/grafana"

 

반응형