Node Exporter
Node Exporter는 Linux 시스템의 하드웨어 및 운영체제 수준 메트릭을 수집하여 Prometheus에 노출하는 도구입니다. Lumie 클러스터의 모든 노드에 DaemonSet 형태로 배포되어 CPU, 메모리, 디스크, 네트워크 등 시스템 전반의 상태를 모니터링합니다. 현재 클러스터는 마스터 노드 1개와 워커 노드 3개(worker-2, worker-3, worker-4)로 구성되며, 총 4개의 Node Exporter 파드가 실행됩니다.
배포 구성
- 네임스페이스:
node-exporter - 차트:
prometheus-node-exporterv4.39.0 (prometheus-community) - 이미지:
zot.lumie-infra.com/prometheus/node-exporter:v1.8.2 - 배포 형태: DaemonSet (모든 노드에 1개씩 배포)
아키텍처
핵심 설정
호스트 접근 권한
Node Exporter는 호스트의 시스템 정보에 접근하기 위해 호스트 네트워크와 PID 네임스페이스를 공유합니다:
hostNetwork: true
hostPID: true
모든 노드 배포
마스터 노드를 포함한 모든 노드에 배포되도록 Toleration이 설정되어 있습니다:
tolerations:
- operator: Exists # 모든 Taint 허용
Prometheus 통합
ServiceMonitor 설정
prometheus:
monitor:
enabled: true
additionalLabels:
release: prometheus
namespace: "" # node-exporter 네임스페이스에 ServiceMonitor 생성
attachMetadata:
node: true # 노드 메타데이터를 메트릭 라벨에 추가
relabelings:
- targetLabel: cluster
replacement: "mayne-cluster"
attachMetadata.node: true를 설정하면 각 메트릭에 노드 이름과 관련 메타데이터가 자동으로 추가됩니다.
ServiceMonitor는 node-exporter 네임스페이스에 생성되어 동일 네임스페이스의 서비스를 자동으로 발견합니다(namespace: "").
서비스 구성
헤드리스 서비스로 각 파드에 직접 접근 가능합니다:
service:
type: ClusterIP
clusterIP: None
주요 메트릭
CPU
| 메트릭 | 설명 |
|---|---|
node_cpu_seconds_total | CPU 모드별 누적 시간 (idle/user/system 등) |
node_load1 / node_load5 / node_load15 | 1/5/15분 부하 평균 |
메모리
| 메트릭 | 설명 |
|---|---|
node_memory_MemTotal_bytes | 전체 메모리 용량 |
node_memory_MemAvailable_bytes | 사용 가능한 메모리 |
node_memory_MemFree_bytes | 빈 메모리 |
node_memory_Buffers_bytes | 버퍼 캐시 |
node_memory_Cached_bytes | 페이지 캐시 |
디스크
| 메트릭 | 설명 |
|---|---|
node_filesystem_size_bytes | 파일시스템 전체 크기 |
node_filesystem_avail_bytes | 사용 가능한 공간 |
node_disk_io_time_seconds_total | 디스크 I/O 시간 |
node_disk_read_bytes_total | 누적 읽기 바이트 |
node_disk_written_bytes_total | 누적 쓰기 바이트 |
네트워크
| 메트릭 | 설명 |
|---|---|
node_network_receive_bytes_total | 수신 바이트 누적 |
node_network_transmit_bytes_total | 송신 바이트 누적 |
node_network_receive_errs_total | 수신 오류 횟수 |
활용 예시
노드 CPU 사용률
# 노드별 CPU 사용률 (%)
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
노드 메모리 사용률
# 노드별 메모리 사용률 (%)
100 * (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)
디스크 사용률
# 파일시스템별 디스크 사용률 (%)
100 * (1 - node_filesystem_avail_bytes{fstype!="tmpfs"} / node_filesystem_size_bytes{fstype!="tmpfs"})