본문 바로가기
Linux

[Linux]Node-Exporter 활용 Ubuntu Host System 모니터링(Grafana)

by lucas_owner 2025. 12. 13.

 

 

Node-Exporter 활용한 Ubuntu System 모니터링(Grafana)

 

우리는 서비스를 운영하며 다양한 상황들을 위해 모니터링 툴을 도입하여 사용하고는 한다.

배포 후 서비스의 상황, 장애 발생시 원인 파악 등등...

사용대상은 크게 Host System, API Server, DB ,,, 와 같은 종류들이 있다.

 

간단하게 Spring Cloud Gateway 에서 모니터링에 관한 이슈와 사용 예시는 아래 링크들에 존재하니

궁금하다면 확인해보도록 하자.

 

Spring Cloud Gateway 개념 예제 (로깅, 모니터링)

Webflux & SCG - Grafana uri Path Metrics "UNKNOWN" 노출

 


해당 포스팅에서는 다양한 모니터링 대상중 Host System(Linux: Ubuntu) 의 모니터링에 대해서 다뤄볼 예정이다.

WAS 에 대한 모니터링 지표를 확인해보면 Memory, network 등과 같이 관리자가 원하는 지표들은 전부 출력이 된다.

하지만 WAS 에서의 지표들은 Host System 에 관한 내용이 아니기 때문에 더 포괄적인 관점에서의 자세한 내용은 파악 하기 어렵다는 단점이 존재한다. 

 

그렇기에 Host System 의 정보들을 수집하여 모니터링 하는것이 이로운 점들이 존재한다. 

(네트워크, Disk I/O, Memory, CPU ...)

 

 

사용 툴 및 시스템

  1. Docker
  2. Prometheus
  3. Grafana
  4. Node-exporter

기본적으로 간단하게 개요를 잡고 가도록 하겠다. 

 

Prometheus는 시스템 및 서비스의 상태를 모니터링하는 오픈소스 시계열 모니터링 시스템이다.
Prometheus는 다양한 대상(Target)에서 시간 경과에 따른 지표(Metric)를 수집하여 시계열 데이터베이스(Time-Series Database, TSDB) 형태로 저장한다.

Metric 수집은 HTTP 를 이용한 Pulling 방식이며 PromQL 이라는 쿼리 언어를 통하여 Metric 을 집계, 필터링 할 수 있다.

 

Grafana는 오픈소스 시각화 대시보드 툴이며, 메트릭 정보를 시각화 해주는 역할을 한다.

유료 툴인 DataDog 과 비슷하다고 생각하면 된다.

Grafana Labs 에서 다양한 템플릿들을 공유하고 있으며, 손쉽게 대시보드를 구성 할 수 있다는 장점이 있다.

 

Node Exporter는 서버의 하드웨어 및 운영체제(OS) 관련 메트릭(CPU, 메모리, 디스크, 네트워크 등)을 수집하여 Prometheus가 가져갈 수 있도록 노출하는 오픈소스 에이전트이다.

HTTP 엔드포인트를 노출하여 Prometheus 가 주기적으로 스크랩(Scrap) 할 수 있게 한다.

Ubuntu 에 설치하여 사용 하지만, 해당 포스팅에서는 Docker 컨테이너로 띄워서 사용할 예정이다.

 

 

설정 준비

node-exporter 를 띄우기전에 Prometheus, Grafana, Prometheus Config 가 필요하다

기본적으로 Docker Container 로 띄우는 방법은 다른 예제가 많기에 해당 포스팅에서는 넘어가도록 하고

중요한 설정부분들만 다루도록 하겠다.

 

수정할 파일

  1. Docker-compose.yml - Node-exporter
  2. Prometheus.yml 

우선 시스템 메트릭 수집에 필요한 Node-exporter compose 파일과, Prometheus 가 스크랩이 가능하도록 Target 을 지정해주면 된다.

 

1. Docker-compose.yml - Node-exporter

services:
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    restart: no

    networks:
      - custom

    ports:
      - "9100:9100"

    # 호스트의 시스템 정보를 읽기 위한 마운트 (읽기 전용)
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro

      # (옵션) textfile collector용 디렉토리
      # 커스텀 메트릭 파일을 넣고 싶으면 이 마운트를 사용.
      - {Custom Dir PATH}:/textfile:rw

    command:
      - "--path.procfs=/host/proc"
      - "--path.sysfs=/host/sys"
      - "--path.rootfs=/rootfs"
      # (옵션) textfile collector 활성화
      - "--collector.textfile.directory=/textfile"

networks:
  custom:
    external: true

 

주의할점은 node-exporter 컨테이너와, Prometheus 컨테이너가 같은 네트워크이어야 한다는 점이다. 

호스트 OS 의 IP 로 접근해도 되지만, 같은 Network 로 묶어 관리를 용이하게 하기위해 설정하였다.

 

 

2. Prometheus.yml

# prometheus.yml

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

  # Ubuntu Node Exporter
  - job_name: "ubuntu-node"
    scrape_interval: 15s
    scrape_timeout: 15s
    static_configs:
      - targets: ["node-exporter:9100"]

 

Prometheus 가 스크랩할 대상인 node-exporter 컨테이너를 지정해주는 설정이다.

scrape_interval 을 지정하지 않는다면, 대시보드상에서 No Data 로 표시 되는 패널들이 많으니, 시스템의 가용범위 안에서 조정하도록하자.


이후 Docker Container 를 실행 시켜주도록하자

 

Grafana 대시보드 추가

이미 만들어져 있는 대시보드 템플릿을 활용하여 바로 적용해볼 예정이다. 

ID: 1860 이며 아래의 링크에서 확인 할 수 있다.

우리가 사용할것은 node-exporter Full 템플릿이며, Node exporter 가 내보낸 거의 모든 메트릭을 모니터링 할 수 있다.

https://grafana.com/grafana/dashboards/1860-node-exporter-full/

 

우선 Data source 를 Prometheus 로 지정해야하며, Running 중인 프로메테우스의 IP:port 로 설정하도록 하자.

추가 -> 설정 -> 저장

 

 

이후 대시보드 탭에서 "Import Dashboard" -> ID: 1860 -> 저장 하면 된다.

 

 

Data source 와 타겟이 제대로 설정되었고, Prometheus 가 정상적으로 메트릭을 수집하고 있다면

아래와 같이 Host System 의 모니터링 대시보드를 확인할 수 있다.

반응형

댓글