PCA — 프로메테우스 인증 어소시에이트 · 익스포터가 실제로 내보내는 숫자 — cAdvisor 와 node exporter · 실습
실측 자료로 읽는 cAdvisor 와 node exporter
목표
이 사이트를 돌리는 7노드 클러스터에서 뜬 실측 지표로 cAdvisor·node exporter 의
숫자를 읽습니다. 끝나면 컨테이너 CPU·메모리·throttle 지표를 보고 "이게 많은 건가" 에
근거를 갖고 답할 수 있습니다.
왜 중요한가
PromQL 문법을 다 알아도, 지표가 무엇을 센 것인지 모르면 숫자를 해석할 수 없습니다.
누적 카운터의 크기는 오래 산 컨테이너가 항상 이기고, working set 과 usage 는 다른
것을 세며, CPU 한도는 cAdvisor 가 아니라 kube-state-metrics 가 알려 줍니다. 이 셋을
모르면 대시보드는 예쁘지만 판정은 매번 틀립니다. 여기서 만지는 자료는 실제 클러스터의
것이라 값이 깔끔하지 않습니다 — throttle 은 0.19% 이고, 한도가 없는 컨테이너에는
지표가 아예 없습니다. 현장이 그렇습니다.
자료에 대해
- 창은 고정된 3시간입니다.
lab-realdata로 확인하세요. - 질의는
promq-at "<PromQL>"로 던집니다. 이 도우미가 창 안의 고정된 시각으로 - 익스포터 노출 형식 원문은
/opt/lab/realdata/expo/에 있습니다. - 출처·채집 시각·손본 내용은
/opt/lab/realdata/README.md에 적혀 있습니다.
묻습니다. 그냥 promq 를 쓰면 지금 시각이라 결과가 빕니다.
내부 IP 와 호스트 이름은 지우지 않았습니다 — 이 사이트의 실제 클러스터입니다.
단계
1. lab-realdata 로 창을 확인하고, monitoring 네임스페이스에서container_cpu_usage_seconds_total 을 내보내는 파드가 몇 개인지 세는 쿼리를/root/pca-exporters/01-count.promql 에 씁니다(계열 수가 아니라 파드 수입니다).
2. monitoring 의 prometheus 컨테이너가 지금 몇 코어를 쓰는지 내는 쿼리를/root/pca-exporters/02-cpu-rate.promql 에 씁니다.
3. CFS throttle 비율(throttled_periods / periods, 윈도 [1h])의 최댓값을 내는
쿼리를 /root/pca-exporters/03-throttle.promql 에, 그 비율이 가장 높은 컨테이너
이름을 /root/pca-exporters/03-throttle.txt 에 한 줄로 씁니다.
4. monitoring 의 grafana 컨테이너에서 container_memory_usage_bytes 와container_memory_working_set_bytes 의 차이를 내는 쿼리를/root/pca-exporters/04-inactive.promql 에, 그 차이와 같은 값을 내는 지표 이름을/root/pca-exporters/04-inactive.txt 에 씁니다.
5. ai 네임스페이스 tts 컨테이너의 QoS 클래스를 id 라벨에서 읽어/root/pca-exporters/05-qos.txt 에 한 줄로 씁니다.
6. /opt/lab/realdata/expo/cadvisor-nuc1.txt 에는 있는데 프로메테우스에는 없는 지표
이름을 세 개 이상 찾아 /root/pca-exporters/06-dropped.txt 에 한 줄에 하나씩 씁니다.
7. ai 네임스페이스에서 CPU 한도 대비 사용률이 가장 높은 값을 내는 쿼리를/root/pca-exporters/07-limit-join.promql 에 씁니다.
8. 192.168.219.120:9100 노드의 CPU 사용률(0~1)을 내는 쿼리를/root/pca-exporters/08-node-cpu.promql 에 씁니다.
9. 같은 노드의 MemAvailable 과 MemFree 차이를 내는 쿼리를/root/pca-exporters/09-mem-available.promql 에 씁니다.
참고
promq-at "count(up)"처럼 따옴표 안에 쿼리를 넣습니다. 파일에 쓴 쿼리는- 흔한 실수 1: 결과가 비면 쿼리가 아니라 시각을 의심하세요.
promq는 지금 - 흔한 실수 2: 라벨 집합이 다른 두 지표를 그냥 나누거나 빼면 결과가 빕니다.
promq-at "$(cat <파일>)" 로 던져 보세요.
시각으로 묻고, 실측 자료는 과거의 고정된 창에만 있습니다.
on(...) 으로 맞추거나 같은 라벨로 좁히세요.
단계 9개
- 적재된 실측 자료 확인하고 파드 수 세기
- 누적 카운터의 기울기 재기
- throttle 비율로 한도 초과 판정하기
- usage 와 working set 의 차이가 무엇인지 확인하기
- cgroup 경로에서 QoS 클래스 읽기
- 원문에는 있는데 프로메테우스에는 없는 지표 찾기
- kube-state-metrics 와 이어 붙여 한도 대비 사용률 내기
- 모드별 누적 시간에서 노드 CPU 사용률 내기
- MemFree 와 MemAvailable 의 차이 재기