홈/엔지니어/클라우드/Prometheus + Node Exporter —…
클라우드중급linuxprometheusmonitoringnode-exporter

Prometheus + Node Exporter — 서버 메트릭 모니터링 구축

Prometheus와 Node Exporter로 리눅스 서버의 CPU·메모리·디스크·네트워크 메트릭을 수집합니다. scrape_configs, PromQL 쿼리, 레코딩 룰, 보존 정책까지 실무 기준으로 구성합니다.

목차
  1. Prometheus 란?
  2. 아키텍처
  3. 1. Node Exporter 설치
  4. 2. Prometheus 설치
  5. 3. prometheus.yml 구성
  6. 4. 핵심 PromQL 쿼리
  7. 5. 레코딩 룰로 쿼리 비용 절감
  8. 6. 보존 정책과 스토리지
  9. 정리

Prometheus 란?

Prometheus는 시계열(time series) 기반의 오픈소스 모니터링 시스템입니다. 핵심 특징은 Pull 방식 으로, Prometheus 서버가 주기적으로 대상(target)의 /metrics 엔드포인트를 긁어(scrape) 옵니다.

  • Pull 모델: 서버가 대상에 접속해 메트릭 수집
  • 다차원 데이터 모델: 메트릭 이름 + 레이블(label) 조합
  • PromQL: 강력한 시계열 쿼리 언어
  • 서비스 디스커버리: 정적 설정 + 동적 발견(K8s, Consul 등)

Node Exporter 는 리눅스 호스트의 CPU·메모리·디스크·네트워크 등 OS 레벨 메트릭을 노출하는 공식 exporter입니다.


아키텍처

CODE
[Node Exporter:9100] <--scrape-- [Prometheus:9090] --query--> [Grafana]
         (호스트 메트릭)               (TSDB 저장)            (시각화)
구성요소포트역할
Prometheus9090수집·저장·쿼리·알림
Node Exporter9100호스트 OS 메트릭 노출
Alertmanager9093알림 라우팅(선택)

1. Node Exporter 설치

Bash
VER=1.8.2
cd /tmp
curl -LO https://github.com/prometheus/node_exporter/releases/download/v${VER}/node_exporter-${VER}.linux-amd64.tar.gz
tar xzf node_exporter-${VER}.linux-amd64.tar.gz
sudo cp node_exporter-${VER}.linux-amd64/node_exporter /usr/local/bin/

sudo useradd --no-create-home --shell /bin/false node_exporter

systemd 서비스 /etc/systemd/system/node_exporter.service:

INI
[Unit]
Description=Prometheus Node Exporter
After=network-online.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter \
  --collector.systemd \
  --collector.processes

[Install]
WantedBy=multi-user.target
Bash
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
curl -s localhost:9100/metrics | head

node_cpu_seconds_total, node_memory_MemAvailable_bytes 같은 메트릭이 보이면 성공입니다.


2. Prometheus 설치

Bash
VER=2.53.0
cd /tmp
curl -LO https://github.com/prometheus/prometheus/releases/download/v${VER}/prometheus-${VER}.linux-amd64.tar.gz
tar xzf prometheus-${VER}.linux-amd64.tar.gz
cd prometheus-${VER}.linux-amd64
sudo cp prometheus promtool /usr/local/bin/
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo cp -r consoles console_libraries /etc/prometheus/

3. prometheus.yml 구성

/etc/prometheus/prometheus.yml:

YAML
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
    cluster: 'prod'

rule_files:
  - "/etc/prometheus/rules/*.yml"

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['localhost:9093']

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node'
    static_configs:
      - targets:
          - '192.168.1.31:9100'
          - '192.168.1.32:9100'
        labels:
          env: 'prod'
    relabel_configs:
      # instance 레이블을 호스트명처럼 깔끔하게
      - source_labels: [__address__]
        regex: '([^:]+):.*'
        target_label: host
        replacement: '$1'

설정 검증 후 실행:

Bash
promtool check config /etc/prometheus/prometheus.yml

/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus \
  --storage.tsdb.retention.time=30d \
  --web.enable-lifecycle

--web.enable-lifecycle 를 켜면 무중단 리로드가 가능합니다.

Bash
curl -X POST http://localhost:9090/-/reload

대상 상태는 웹 UI http://<서버>:9090/targets 또는:

Bash
curl -s 'http://localhost:9090/api/v1/targets' | jq '.data.activeTargets[].health'

4. 핵심 PromQL 쿼리

CPU 사용률(%)

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

메모리 사용률(%)

PROMQL
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

디스크 사용률(%) — 루트 파티션

PROMQL
100 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100)

네트워크 수신 트래픽(bytes/s)

PROMQL
rate(node_network_receive_bytes_total{device!~"lo|veth.*"}[5m])

디스크 가득 참 예측(4시간 뒤 0 이하면 위험)

PROMQL
predict_linear(node_filesystem_avail_bytes{mountpoint="/"}[6h], 4 * 3600) < 0

rate() 는 Counter(단조 증가) 메트릭에만 사용합니다. Gauge(증감하는 값, 예: 메모리)에는 rate를 쓰면 안 됩니다.


5. 레코딩 룰로 쿼리 비용 절감

자주 쓰는 무거운 쿼리는 미리 계산해 새 시계열로 저장합니다. /etc/prometheus/rules/node.yml:

YAML
groups:
  - name: node-recording
    interval: 30s
    rules:
      - record: instance:node_cpu_utilization:ratio
        expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

      - record: instance:node_memory_utilization:ratio
        expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

Grafana나 알림에서는 instance:node_cpu_utilization:ratio 처럼 미리 계산된 값을 참조하면 됩니다.


6. 보존 정책과 스토리지

옵션의미
--storage.tsdb.retention.time=30d30일 보관
--storage.tsdb.retention.size=50GB용량 기준 보관

장기 보관·다중 클러스터 집계가 필요하면 Thanos나 VictoriaMetrics 같은 원격 스토리지를 연동합니다. 단일 Prometheus의 로컬 디스크는 단기 보관에 적합합니다.


정리

항목핵심
수집 방식Pull — Prometheus가 /metrics를 scrape
호스트 메트릭Node Exporter(:9100)
설정 검증promtool check config
무중단 리로드--web.enable-lifecycle + POST /-/reload
Counterrate() / Gauge
성능레코딩 룰로 사전 계산
보존retention.time / .size, 장기는 Thanos

Prometheus의 핵심은 "Counter는 rate, Gauge는 그대로"라는 메트릭 타입 구분과 PromQL 패턴입니다. Node Exporter로 OS 메트릭을 안정적으로 수집하면, 다음 단계인 Grafana 시각화와 알림으로 자연스럽게 확장할 수 있습니다.

#prometheus#monitoring#node-exporter#metrics
편집 안내 · Editorial Note

AI 도구가 초안 작성에 사용될 수 있습니다. 명령어의 실행 여부와 검증 환경은 각 가이드에 기재된 근거를 확인하세요. 적용 전 사용 중인 버전의 공식 문서를 확인하고, 오류는 이메일로 알려주세요. 이메일로 제보

주제 관련 공식 문서(자동 연결 · 문장별 근거 아님)GNU/Linux man 페이지 ↗Prometheus 공식 문서 ↗

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.