Theme:

Prometheus를 설치했는데 서버의 CPU, 메모리, 디스크 메트릭이 보이지 않는다면? Prometheus는 메트릭 수집 서버이지, 메트릭을 직접 생성하지는 않습니다.

Node Exporter 는 Prometheus 공식 프로젝트에서 제공하는 Unix/Linux 시스템 메트릭 수집기입니다. 설치하면 포트 9100의 /metrics 엔드포인트에서 node_ 접두사가 붙은 메트릭을 노출하고, Prometheus가 이를 주기적으로 스크랩합니다.

메트릭 예시설명
node_cpu_seconds_totalCPU 코어별 사용 시간 (mode별: user, system, idle 등)
node_memory_MemAvailable_bytes사용 가능한 메모리
node_filesystem_avail_bytes파일시스템 가용 공간
node_network_receive_bytes_total네트워크 인터페이스별 수신 바이트
node_exporter_build_infoNode Exporter 빌드 정보

Prometheus가 이 엔드포인트를 주기적으로 스크랩(pull)하여 시계열 데이터로 저장하는 구조입니다.


전용 사용자 생성

Node Exporter를 root가 아닌 전용 서비스 계정으로 실행합니다.

SHELL
sudo useradd -rs /bin/false node_exporter

-r은 시스템 계정, -s /bin/false는 로그인 셸을 비활성화하는 옵션입니다. 보안상 서비스 전용 계정에는 로그인을 허용하지 않는 것이 원칙입니다.


바이너리 다운로드 및 설치

SHELL
cd /opt
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar -xvzf node_exporter-1.8.2.linux-amd64.tar.gz
sudo chown -R node_exporter:node_exporter node_exporter-1.8.2.linux-amd64

(참고) 최신 버전은 Prometheus 다운로드 페이지에서 확인할 수 있습니다.


systemd 서비스 등록

/etc/systemd/system/node_exporter.service 파일을 생성합니다.

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

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/opt/node_exporter-1.8.2.linux-amd64/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target

서비스를 등록하고 시작합니다.

SHELL
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter

메트릭이 정상 노출되는지 확인합니다.

SHELL
curl -s http://localhost:9100/metrics | head -20

Prometheus에 스크랩 대상 추가

Node Exporter가 동작 중이면 Prometheus 설정 파일에 타깃을 추가합니다.

/opt/prometheus/prometheus.yml에 아래 scrape_configs 항목을 추가합니다.

YAML
scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['<Node Exporter IP>:9100']

설정을 반영합니다.

SHELL
sudo systemctl reload prometheus
# 또는 ExecReload가 설정되어 있지 않다면:
# sudo systemctl restart prometheus

Prometheus 웹 UI(http://<Prometheus IP>:9090)의 Status > Targets 페이지에서 job_name: node_exporter 항목의 상태가 UP 인지 확인합니다.


타깃이 DOWN인 경우

확인 항목명령
Node Exporter 서비스 상태systemctl status node_exporter
포트 9100 리스닝 여부ss -tlnp | grep 9100
방화벽 확인firewall-cmd --list-ports
Prometheus → Node Exporter 네트워크 연결curl http://<IP>:9100/metrics

방화벽에서 9100 포트가 막혀 있다면 열어줍니다.

SHELL
sudo firewall-cmd --permanent --add-port=9100/tcp
sudo firewall-cmd --reload

주의할 점

방화벽에서 9100 포트 미개방

Node Exporter를 설치하고 서비스를 시작했는데 Prometheus Targets에서 DOWN으로 표시되는 경우, 십중팔구 방화벽 문제입니다. Node Exporter가 실행 중인 서버에서 9100 포트를 열어야 Prometheus가 스크랩할 수 있습니다.

모니터링 대상 서버마다 설치 필요

Node Exporter는 메트릭을 제공하는 역할이므로, 모니터링하고 싶은 모든 서버에 각각 설치 해야 합니다. Prometheus 서버에만 설치하면 Prometheus 서버 자체의 메트릭만 수집됩니다.


정리

단계명령 / 설정
전용 사용자 생성useradd -rs /bin/false node_exporter
바이너리 설치wgettar/opt/node_exporter-*
systemd 등록/etc/systemd/system/node_exporter.service
서비스 시작systemctl enable --now node_exporter
메트릭 확인curl http://localhost:9100/metrics
Prometheus 연동prometheus.ymltargets: ['<IP>:9100'] 추가
연동 확인Prometheus UI > Status > Targets → UP
댓글 로딩 중...