Node Exporter 설치
Prometheus를 설치했는데 서버의 CPU, 메모리, 디스크 메트릭이 보이지 않는다면? Prometheus는 메트릭 수집 서버이지, 메트릭을 직접 생성하지는 않습니다.
Node Exporter 는 Prometheus 공식 프로젝트에서 제공하는 Unix/Linux 시스템 메트릭 수집기입니다. 설치하면 포트 9100의 /metrics 엔드포인트에서 node_ 접두사가 붙은 메트릭을 노출하고, Prometheus가 이를 주기적으로 스크랩합니다.
| 메트릭 예시 | 설명 |
|---|---|
node_cpu_seconds_total | CPU 코어별 사용 시간 (mode별: user, system, idle 등) |
node_memory_MemAvailable_bytes | 사용 가능한 메모리 |
node_filesystem_avail_bytes | 파일시스템 가용 공간 |
node_network_receive_bytes_total | 네트워크 인터페이스별 수신 바이트 |
node_exporter_build_info | Node Exporter 빌드 정보 |
Prometheus가 이 엔드포인트를 주기적으로 스크랩(pull)하여 시계열 데이터로 저장하는 구조입니다.
전용 사용자 생성
Node Exporter를 root가 아닌 전용 서비스 계정으로 실행합니다.
sudo useradd -rs /bin/false node_exporter
-r은 시스템 계정, -s /bin/false는 로그인 셸을 비활성화하는 옵션입니다. 보안상 서비스 전용 계정에는 로그인을 허용하지 않는 것이 원칙입니다.
바이너리 다운로드 및 설치
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 파일을 생성합니다.
[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
서비스를 등록하고 시작합니다.
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
메트릭이 정상 노출되는지 확인합니다.
curl -s http://localhost:9100/metrics | head -20
Prometheus에 스크랩 대상 추가
Node Exporter가 동작 중이면 Prometheus 설정 파일에 타깃을 추가합니다.
/opt/prometheus/prometheus.yml에 아래 scrape_configs 항목을 추가합니다.
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: ['<Node Exporter IP>:9100']
설정을 반영합니다.
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 포트가 막혀 있다면 열어줍니다.
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 |
| 바이너리 설치 | wget → tar → /opt/node_exporter-* |
| systemd 등록 | /etc/systemd/system/node_exporter.service |
| 서비스 시작 | systemctl enable --now node_exporter |
| 메트릭 확인 | curl http://localhost:9100/metrics |
| Prometheus 연동 | prometheus.yml에 targets: ['<IP>:9100'] 추가 |
| 연동 확인 | Prometheus UI > Status > Targets → UP |