
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 ...)
사용 툴 및 시스템
- Docker
- Prometheus
- Grafana
- 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 로 띄우는 방법은 다른 예제가 많기에 해당 포스팅에서는 넘어가도록 하고
중요한 설정부분들만 다루도록 하겠다.
수정할 파일
- Docker-compose.yml - Node-exporter
- 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 의 모니터링 대시보드를 확인할 수 있다.

'Linux' 카테고리의 다른 글
| [Linux] Ubuntu 부팅시 iptables 설정 reset 대응 (0) | 2025.05.26 |
|---|---|
| [Linux] iPad 로 서버 콘솔 접속(Termius), ssh key 인증 접속방법 (2) | 2025.02.13 |
| [Linux] Ubuntu - OOM(Out Of Memory) 메모리 부족과 대응 (1) | 2024.09.18 |
| [Ubuntu] Journal Log 관리(삭제) - systemctl 느리게 동작 (0) | 2024.07.27 |
| [Linux] alias로 자주쓰는 커맨드 설정 (1) | 2023.10.25 |
댓글