Pod/Container Failures
kubectl에서는 Pod가 Running으로 보여도, 그 안의 컨테이너 하나는 조용히 죽어가고 있을 수 있습니다. OOMKilled 상태이거나, CrashLoopBackOff로 재시작을 반복하거나, 에러와 함께 종료되는 식입니다. Pod/Container Failures는 Wave 에이전트가 이미 전송하는 데이터에서 이런 비정상적인 상태 전이를 자동으로 감지하고, 이를 설명하는 데 필요한 컨텍스트를 함께 수집합니다. 그래서 나중에 kubectl이나 k9s를 뒤질 필요가 없습니다.
- 설정이 필요 없습니다. 에이전트가 클러스터의 모든 Pod를 관찰합니다. 워크로드별로 따로 켤 필요가 없고, 노이즈가 심한 워크로드에 한해서만 감지를 제외할 수 있습니다.
- 폴링이 없습니다. 감지는 push 방식입니다. 에이전트가 상태 변화를 보고하는 순간이 곧 트리거이며, 조정할 스크레이프 주기 같은 것은 없습니다.
무엇을 감지하는가
Pod/Container Failures는 발생 위치별로 묶인 11가지 비정상 전이를 인식합니다. 페이지 상단의 What is detected? 링크에서 전체 커버리지를 확인할 수 있습니다.
컨테이너 단위 (5개)
| 전이 | 의미 |
|---|---|
| OOMKilled | 메모리 limit을 초과해 커널이 컨테이너를 강제 종료했습니다. |
| CrashLoopBackOff | 컨테이너가 계속 크래시하고, Kubernetes가 재시작 간격을 점점 늘리고 있습니다. |
| ContainerCrash | 컨테이너가 OOM이 아닌 사유로 0이 아닌 종료 코드로 종료됐습니다. 애플리케이션 레벨의 장애입니다. |
| UnexpectedExit0 | 컨테이너가 예상치 못하게 종료 코드 0으로 끝났습니다(계속 실행 중이어야 할 프로세스가 멈췄습니다). |
| ReadyLoss | 정상(ready)이던 컨테이너가 readiness를 잃었습니다. |
Pod 단위 (6개)
| 전이 | 의미 |
|---|---|
| PodEvicted | Pod가 축출(evict)됐습니다(예: Node 리소스 압박). |
| PodNodeShutdown | Pod가 있던 Node가 종료됐습니다. |
| PodPreempted | 더 높은 우선순위의 Pod에 의해 Pod가 선점(preempt)됐습니다. |
| PodAdmissionFailed | Pod가 Node에서 admission을 통과하지 못했습니다. |
| PodStuckTerminating | Pod가 Terminating 상태에 멈춰 있습니다. |
| PodFailed | Pod가 최종적으로 Failed 단계에 도달했습니다. |
애플리케이션 크래시의 경우 Wave는 가능성 있는 원인도 함께 짚어줍니다. 예를 들어 ContainerCrash라면 앱의 panic이나 예외, 처리되지 않은 시그널, 잘못된 인자나 환경변수, 의존 서비스 연결 실패 중 어디를 봐야 하는지 알려줍니다.
장애 타임라인
페이지 상단은 48시간 장애 히트맵입니다. 영향을 받은 워크로드마다 한 행(그 종류, namespace, 총 인시던트 수와 함께)이 있고, 시간마다 한 칸이 있습니다.
- 색상은 장애 종류를 나타냅니다: Container, Pod, 또는 Both.
- 명암은 그 시간에 몇 건의 인시던트가 발생했는지를 나타내서, 크래시가 몰린 구간이 한눈에 드러납니다.
이를 통해 워크로드가 언제부터 실패하기 시작했는지, 문제가 아직 진행 중인지 이미 해소됐는지를 한눈에 볼 수 있습니다.
워크로드 목록과 드릴다운
타임라인 아래에는 영향받은 워크로드 테이블이 있습니다: Kind, Namespace, Workload(자유 텍스트 검색 가능), 건수와 함께 표시되는 Recent (24h) 인시던트 스파크라인, 그리고 Last incident의 종류와 시각(예: CrashLoopBackOff, OOMKilled, Unexpected exit 0, Container crash)입니다. 노이즈가 심한 워크로드는 Stop detection으로 감지를 끄고, Manage stopped workloads로 다시 켤 수 있습니다.
워크로드를 선택하면 상세 페이지가 열리며, 기본적으로 최근 5일 범위로 스코프됩니다.
-
Pods with incidents는 실패한 Pod 목록을 Failure type(Container 또는 Pod), Pod Name, Containers, Incidents 건수, Last incident와 함께 보여줍니다.
-
Incident timeline은 감지된 모든 상태 전이를 시간순으로 보여주며, 종류별로 필터링할 수 있습니다. 각 항목에는 시각, 장애 배지, 컨테이너, 그리고 Wave가 실패 순간 해당 컨테이너의 로그를 수집했음을 나타내는 Log collected 표시가 함께 붙습니다.
-
Incident detail은 선택한 인시던트를 탭으로 구성된 패널에서 보여줍니다.
- Overview: 무엇이 실패했고 무엇을 확인해야 하는지에 대한 평이한 설명과, 인시던트의 핵심 정보(pod, container, reason, 당시 리소스 상태)입니다.
- Log: 실패 시점에 수집된 이전 컨테이너 인스턴스의 로그(
kubectl logs --previous)이며, 원클릭 Copy를 지원합니다. - pod.yaml과 node.yaml: 수집된 pod, node 매니페스트로, 근본 원인 분석을 한곳에서 끝낼 수 있습니다.
탭에 점이 표시되어 있으면 Wave가 해당 인시던트의 그 아티팩트를 수집했다는 뜻입니다.