Gom3rye

K8S 프로젝트 중) 서비스마다 메트릭 정보를 수집할 수 있나? 본문

카테고리 없음

K8S 프로젝트 중) 서비스마다 메트릭 정보를 수집할 수 있나?

Gom3rye 2025. 9. 18. 17:42
728x90
반응형

노드 익스포터만으로는 서비스마다 메트릭 정보를 수집할 수 없고 cAdvisor + kube-state-metrics 가 있어야지 서비스마다 메트릭 정보를 수집할 수 있다.

 

각 모니터링 도구는 전문 분야가 명확하게 나뉘어 있다.

  • Node Exporter: 이름 그대로 노드(Node) 자체의 건강 상태를 진단하는 데 특화되어 있다. 운영체제 커널이 제공하는 하드웨어 및 OS 메트릭(CPU, 메모리, 디스크 I/O, 네트워크 등)을 수집한다. 즉, '어떤 Pod이 이 CPU를 얼마나 쓰는가'가 아니라 '이 Node의 전체 CPU 사용량이 얼마인가'를 알려준다. 쿠버네티스의 'Pod'나 'Service' 같은 추상적인 개념은 전혀 인지하지 못한다.
  • cAdvisor (Container Advisor): 컨테이너 단위의 리소스 사용량을 수집하는 데 특화된 도구. cAdvisor는 별도로 설치할 필요 없이 모든 쿠버네티스 노드의 Kubelet에 기본적으로 내장되어 있다. 각 컨테이너의 CPU, 메모리, 파일시스템, 네트워크 사용량 등 상세한 성능 지표를 제공한다.
  • kube-state-metrics: 쿠버네티스 오브젝트의 상태 정보를 메트릭으로 제공한다. 예를 들어, 'Deployment의 복제본(replica) 개수는 몇 개로 설정되어 있고, 현재 몇 개가 사용 가능한가?', 'Pod의 현재 상태는 Running인가, Pending인가?', 'HPA(Horizontal Pod Autoscaler)의 상태는 어떠한가?' 등과 같은 쿠버네티스 클러스터의 전반적인 상태 정보를 알려준다. 리소스 사용량이 아닌, 상태 그 자체를 다룬다.

해결 방안: 어떻게 서비스 단위 메트릭을 수집할까?

현재 구성한 Prometheus Agent가 Node Exporter 외에 Kubelet(cAdvisor)kube-state-metrics를 추가로 수집(scrape)하도록 설정하면 된다.

  1. 노드 메트릭 수집 (현재 구성)
    • 대상: Node Exporter (DaemonSet으로 각 노드에 배포)
    • 수집 정보: 노드별 CPU, 메모리, 디스크, 네트워크 등 하드웨어/OS 지표
  2. Pod/컨테이너 리소스 메트릭 수집 (추가 필요)
    • 대상: 각 노드의 Kubelet (/metrics/cadvisor 엔드포인트)
    • 수집 정보: Pod, 컨테이너별 CPU, 메모리, 네트워크 사용량 등
    • Prometheus의 Kubernetes 서비스 디스커버리 기능이 각 노드의 Kubelet을 자동으로 찾아내어 메트릭을 수집한다.
  3. 쿠버네티스 오브젝트 상태 메트릭 수집 (추가 필요)
    • 대상: kube-state-metrics (클러스터 내에 단일 Deployment로 배포)
    • 수집 정보: Deployment, StatefulSet, DaemonSet, Service, Pod 등의 상태, 개수, 설정 정보
    • 이 메트릭과 cAdvisor의 리소스 메트릭을 조합하면 "특정 Service에 속한 Pod들의 총 CPU 사용량" 같은 고차원적인 조회가 가능해진다.

세 가지 종류의 메트릭을 모두 LMV 클러스터의 중앙 Prometheus 서버로 보내면, Grafana에서 다음과 같은 강력한 쿼리가 가능해진다.

  • sum(rate(container_cpu_usage_seconds_total{namespace="my-app", container!=""}[5m])) by (pod)
    • 'my-app' 네임스페이스에 있는 Pod별 CPU 사용량
  • kube_deployment_status_replicas_available{deployment="my-deployment"}
    • 'my-deployment'라는 이름의 Deployment에서 현재 사용 가능한 Pod의 개수

## 요약

  • Node Exporter노드의 하드웨어/OS 메트릭을 담당
  • 서비스/Pod 단위의 리소스 사용량은 Kubelet에 내장된 cAdvisor가 수집
  • Deployment, Service 등 쿠버네티스 오브젝트의 상태 정보kube-state-metrics가 담당
728x90
반응형