[프로메테우스 #2]컨테이너(cAdvisor) & 노드(Node Exporter) 모니터링

도람·2025년 12월 5일
post-thumbnail

cAdvisor

cAdvisor(Container Advisor)는 쿠버네티스 노드에서 컨테이너의 리소스 사용량을 수집하는 모니터링 도구이다.
도커 엔진에 기본 내장되어 있으며, CPU∙메모리∙네트워크∙디스크 I/O 같은 컨테이너 단위 메트릭을 자동으로 수집한다.

쿠버네티스에서는 kubelet 안에 포함되어 동작하며, 보통 노드의 4194 포트에서 cAdvisor UI가 열린다.
프로메테우스는 이 cAdvisor 엔드포인트를 스크랩하여 컨테이너 단위 메트릭을 저장한다.

정리하면 다음과 같다.

  • cAdvisor는 각 노드에서 자동 실행된다
  • kubelet이 노드의 컨테이너 정보를 cAdvisor 형태로 노출한다
  • 프로메테우스는 각 노드의 /metrics/cadvisor 엔드포인트를 긁어간다

실습

이번 포스팅에서는 아주 간단하게 다음 흐름으로 진행한다.

  • 테스트용 파드 생성 (busybox)
  • 프로메테우스에서 cAdvisor 메트릭이 수집되고 있는지 확인
  • 특정 컨테이너 메트릭 쿼리 실행해보기

테스트용 busybox 파드 만들기

임시로 CPU를 약간 사용하는 busybox 파드를 만든다.

파일명 : busybox-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: busybox-test
  labels:
    app: busybox-test
spec:
  containers:
    - name: busybox
      image: busybox
      command: ["sh", "-c", "while true; do date; sleep 1; done"]

배포 & 정상 동작 확인

kubectl apply -f busybox-pod.yaml
kubectl get pod busybox-test


CPU 사용량 그래프 보기

프로메테우스에서 graph 탭으로 이동한 뒤 다음 쿼리를 실행한다.

rate(container_cpu_usage_seconds_total{pod="busybox-test"}[1m])

1초마다 찍는 로그 덕분에 CPU가 아주 약간씩 움직이는 그래프가 보인다.

이렇게 하면 cAdvisor가 정상적으로 컨테이너 메트릭을 수집하고 있다는 것을 확인할 수 있다.



Node Exporter란?

Node Exporter는 “노드(서버) 자체의 OS 레벨 메트릭”을 수집하는 Prometheus 익스포터다.

즉, Kubernetes 파드/컨테이너가 아니라
워커 노드(OS) 를 모니터링하기 위한 도구다.

수집하는 대표 메트릭:

  • CPU 사용량 (노드 전체)
  • 메모리 사용량 (노드 전체)
  • 디스크 사용량 / inode
  • 파일시스템 I/O
  • 네트워크 대역폭 / 패킷 drop / error
  • 시스템 부하(load average)
  • OS 커널 정보
    -CPU 코어 정보

즉,
노드 익스포터는 “노드가 건강한지”를 Prometheus에 알려주는 OS 모니터링 도구이다.


실습

Node Exporter는 모든 노드에 1개씩 떠야 하므로 DaemonSet을 사용한다.

파일명 : node-exporter.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
  namespace: monitoring
  labels:
    app: node-exporter
spec:
  selector:
    matchLabels:
      app: node-exporter
  template:
    metadata:
      labels:
        app: node-exporter
    spec:
      hostPID: true
      hostNetwork: true
      containers:
      - name: node-exporter
        image: prom/node-exporter:latest
        ports:
        - containerPort: 9100
          hostPort: 9100
        securityContext:
          privileged: true

배포&확인 명령어

kubectl apply -f node-exporter.yaml
kubectl get pods -n monitoring -o wide | grep node-exporter


나는 처음 배포했을 때 이미지 충돌 등의 문제로 에러가 발생했다.


트러블슈팅 잘못 설치된 node-exporter 싹 지우기

새로 생성된 pod 이름이 node-exporter-xxxxx 형태로 계속 생겨났기 때문에,
DaemonSet을 먼저 삭제해야 한다.

kubectl delete daemonset node-exporter -n monitoring
kubectl delete pod -n monitoring -l app=node-exporter

그리고 확인해준다.

kubectl get daemonset -n monitoring
kubectl get pods -n monitoring | grep node-exporter

이미 Prometheus 설치 과정에서 Node Exporter가 DaemonSet 형태로 구성되어 있기 때문에,
추가 설치 없이 기본 제공 메트릭을 바로 확인할 수 있다.


Prometheus에서 메트릭 확인

Prometheus UI 열고, Query에 아래를 입력한다.

CPU 사용량

node_cpu_seconds_total

메모리 사용량

node_memory_MemAvailable_bytes

파일시스템 사용량

node_filesystem_avail_bytes

노드 부하율

node_load1

위와 같이 메트릭이 정상적으로 수집되는 것을 확인할 수 있다.


Node Exporter vs cAdvisor

구분Node ExportercAdvisor
모니터링 대상노드 전체(OS)파드/컨테이너
설치 방식DaemonSet 직접 설치kubelet에 기본 내장
메트릭 포트910010250 + /metrics/cadvisor
대표 메트릭CPU/Memory/Disk I/O파드 CPU/메모리
목적노드 상태 모니터링컨테이너 리소스 모니터링

위 글은 [인프런 강의]실습으로 배우는 프로메테우스목차만 참고하여 작성한 것이며,
강의에서 제공된 코드나 자료(PPT 등)는 사용하지 않았습니다.

profile
정도를 걷는 엔지니어

0개의 댓글