测验:读懂容器与节点指标
한국어 원문으로 표시합니다.
container_cpu_usage_seconds_total 의 값이 658855 로 나왔습니다. 이 숫자를 어떻게 읽어야 합니까?
- 지금 658855 밀리코어를 쓰고 있다는 뜻이므로 한도와 바로 비교한다
- 컨테이너가 시작한 뒤 누적한 CPU 초이므로 크기가 아니라 rate 로 기울기를 봐야 한다
- 최근 5분 동안 쓴 CPU 초이므로 300 으로 나누면 코어 수가 된다
- cgroup 이 허용한 CPU 시간의 상한이므로 초과하면 throttle 이 걸린다
container_memory_working_set_bytes 는 container_memory_usage_bytes 와 무엇이 다릅니까?
- working set 은 스왑을 포함하고 usage 는 포함하지 않는다
- working set 은 컨테이너 한도를, usage 는 실제 사용량을 뜻한다
- usage 에서 회수 가능한 비활성 파일 캐시를 뺀 값이 working set 이고, 쿠버네티스의 축출 판정이 이 값을 쓴다
- working set 은 노드 전체의 합계이고 usage 는 컨테이너 하나의 값이다
어떤 컨테이너에 container_cpu_cfs_periods_total 계열이 아예 없습니다. 가장 그럴듯한 이유는?
- 그 컨테이너에 CPU 한도(limit)가 설정되어 있지 않아 CFS 쿼터가 걸리지 않았다
- 그 컨테이너가 throttle 을 한 번도 겪지 않아 계열이 만들어지지 않았다
- cAdvisor 가 그 노드에서 꺼져 있어 CPU 계열 전체가 빠졌다
- 그 컨테이너의 QoS 클래스가 Guaranteed 라서 CFS 대신 실시간 스케줄러를 쓴다
노드의 CPU 사용률을 node_cpu_seconds_total 로 구할 때 올바른 방법은?
sum(rate(node_cpu_seconds_total[5m]))으로 모든 모드를 합친다rate(node_cpu_seconds_total{mode="user"}[5m])하나만 본다1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m]))으로 쉬지 않은 비율을 낸다max(node_cpu_seconds_total) - min(node_cpu_seconds_total)으로 증가분을 낸다
노드의 node_memory_MemFree_bytes 가 1.5 GiB, node_memory_MemAvailable_bytes 가 9.0 GiB 입니다. 이 상태를 어떻게 읽어야 합니까?
- available 이 free 보다 크므로 지표 수집이 잘못된 것이다
- free 만 보고 경보를 걸면 오탐이 난다. 차이만큼은 페이지 캐시가 쓰고 있지만 필요하면 회수된다
- 메모리 누수가 진행 중이라 available 이 곧 free 수준으로 떨어진다
- 스왑이 7.5 GiB 사용 중이라는 뜻이므로 스왑을 꺼야 한다
cAdvisor 원문에는 container_spec_cpu_quota 가 있는데 프로메테우스에 질의하면 결과가 빕니다. 무엇을 먼저 의심해야 합니까?
- kubelet 이 그 지표를 내보내지 않도록 빌드된 것이다
- 그 컨테이너에 CPU 한도가 없어서 값이 기록되지 않은 것이다
- 프로메테우스가 그 시각에 스크레이프에 실패해 표본이 빠진 것이다
- 스크레이프 잡의 metric_relabel_configs 가 그 계열을 버리도록 설정된 것이다