
cAdvisor(Container Advisor)는 쿠버네티스 노드에서 컨테이너의 리소스 사용량을 수집하는 모니터링 도구이다.
도커 엔진에 기본 내장되어 있으며, CPU∙메모리∙네트워크∙디스크 I/O 같은 컨테이너 단위 메트릭을 자동으로 수집한다.
쿠버네티스에서는 kubelet 안에 포함되어 동작하며, 보통 노드의 4194 포트에서 cAdvisor UI가 열린다.
프로메테우스는 이 cAdvisor 엔드포인트를 스크랩하여 컨테이너 단위 메트릭을 저장한다.
정리하면 다음과 같다.
이번 포스팅에서는 아주 간단하게 다음 흐름으로 진행한다.
임시로 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

프로메테우스에서 graph 탭으로 이동한 뒤 다음 쿼리를 실행한다.
rate(container_cpu_usage_seconds_total{pod="busybox-test"}[1m])
1초마다 찍는 로그 덕분에 CPU가 아주 약간씩 움직이는 그래프가 보인다.
이렇게 하면 cAdvisor가 정상적으로 컨테이너 메트릭을 수집하고 있다는 것을 확인할 수 있다.

Node Exporter는 “노드(서버) 자체의 OS 레벨 메트릭”을 수집하는 Prometheus 익스포터다.
즉, Kubernetes 파드/컨테이너가 아니라
워커 노드(OS) 를 모니터링하기 위한 도구다.
수집하는 대표 메트릭:
즉,
노드 익스포터는 “노드가 건강한지”를 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

나는 처음 배포했을 때 이미지 충돌 등의 문제로 에러가 발생했다.
새로 생성된 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 UI 열고, Query에 아래를 입력한다.
CPU 사용량
node_cpu_seconds_total
메모리 사용량
node_memory_MemAvailable_bytes
파일시스템 사용량
node_filesystem_avail_bytes
노드 부하율
node_load1

위와 같이 메트릭이 정상적으로 수집되는 것을 확인할 수 있다.
| 구분 | Node Exporter | cAdvisor |
|---|---|---|
| 모니터링 대상 | 노드 전체(OS) | 파드/컨테이너 |
| 설치 방식 | DaemonSet 직접 설치 | kubelet에 기본 내장 |
| 메트릭 포트 | 9100 | 10250 + /metrics/cadvisor |
| 대표 메트릭 | CPU/Memory/Disk I/O | 파드 CPU/메모리 |
| 목적 | 노드 상태 모니터링 | 컨테이너 리소스 모니터링 |
위 글은 [인프런 강의]실습으로 배우는 프로메테우스목차만 참고하여 작성한 것이며,
강의에서 제공된 코드나 자료(PPT 등)는 사용하지 않았습니다.