Prometheus 란?
Prometheus는 시계열(time series) 기반의 오픈소스 모니터링 시스템입니다. 핵심 특징은 Pull 방식 으로, Prometheus 서버가 주기적으로 대상(target)의 /metrics 엔드포인트를 긁어(scrape) 옵니다.
- Pull 모델: 서버가 대상에 접속해 메트릭 수집
- 다차원 데이터 모델: 메트릭 이름 + 레이블(label) 조합
- PromQL: 강력한 시계열 쿼리 언어
- 서비스 디스커버리: 정적 설정 + 동적 발견(K8s, Consul 등)
Node Exporter 는 리눅스 호스트의 CPU·메모리·디스크·네트워크 등 OS 레벨 메트릭을 노출하는 공식 exporter입니다.
아키텍처
[Node Exporter:9100] <--scrape-- [Prometheus:9090] --query--> [Grafana]
(호스트 메트릭) (TSDB 저장) (시각화)| 구성요소 | 포트 | 역할 |
|---|---|---|
| Prometheus | 9090 | 수집·저장·쿼리·알림 |
| Node Exporter | 9100 | 호스트 OS 메트릭 노출 |
| Alertmanager | 9093 | 알림 라우팅(선택) |
1. Node Exporter 설치
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_exportersystemd 서비스 /etc/systemd/system/node_exporter.service:
[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.targetsudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
curl -s localhost:9100/metrics | headnode_cpu_seconds_total, node_memory_MemAvailable_bytes 같은 메트릭이 보이면 성공입니다.
2. Prometheus 설치
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:
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'설정 검증 후 실행:
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 를 켜면 무중단 리로드가 가능합니다.
curl -X POST http://localhost:9090/-/reload대상 상태는 웹 UI http://<서버>:9090/targets 또는:
curl -s 'http://localhost:9090/api/v1/targets' | jq '.data.activeTargets[].health'4. 핵심 PromQL 쿼리
CPU 사용률(%)
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)메모리 사용률(%)
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100디스크 사용률(%) — 루트 파티션
100 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100)네트워크 수신 트래픽(bytes/s)
rate(node_network_receive_bytes_total{device!~"lo|veth.*"}[5m])디스크 가득 참 예측(4시간 뒤 0 이하면 위험)
predict_linear(node_filesystem_avail_bytes{mountpoint="/"}[6h], 4 * 3600) < 0rate() 는 Counter(단조 증가) 메트릭에만 사용합니다. Gauge(증감하는 값, 예: 메모리)에는 rate를 쓰면 안 됩니다.
5. 레코딩 룰로 쿼리 비용 절감
자주 쓰는 무거운 쿼리는 미리 계산해 새 시계열로 저장합니다. /etc/prometheus/rules/node.yml:
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)) * 100Grafana나 알림에서는 instance:node_cpu_utilization:ratio 처럼 미리 계산된 값을 참조하면 됩니다.
6. 보존 정책과 스토리지
| 옵션 | 의미 |
|---|---|
| --storage.tsdb.retention.time=30d | 30일 보관 |
| --storage.tsdb.retention.size=50GB | 용량 기준 보관 |
장기 보관·다중 클러스터 집계가 필요하면 Thanos나 VictoriaMetrics 같은 원격 스토리지를 연동합니다. 단일 Prometheus의 로컬 디스크는 단기 보관에 적합합니다.
정리
| 항목 | 핵심 |
|---|---|
| 수집 방식 | Pull — Prometheus가 /metrics를 scrape |
| 호스트 메트릭 | Node Exporter(:9100) |
| 설정 검증 | promtool check config |
| 무중단 리로드 | --web.enable-lifecycle + POST /-/reload |
| Counter | rate() / Gauge |
| 성능 | 레코딩 룰로 사전 계산 |
| 보존 | retention.time / .size, 장기는 Thanos |
Prometheus의 핵심은 "Counter는 rate, Gauge는 그대로"라는 메트릭 타입 구분과 PromQL 패턴입니다. Node Exporter로 OS 메트릭을 안정적으로 수집하면, 다음 단계인 Grafana 시각화와 알림으로 자연스럽게 확장할 수 있습니다.
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.