korean-docs
Wave Diagnosis
Pod/컨테이너 장애

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개)

전이의미
PodEvictedPod가 축출(evict)됐습니다(예: Node 리소스 압박).
PodNodeShutdownPod가 있던 Node가 종료됐습니다.
PodPreempted더 높은 우선순위의 Pod에 의해 Pod가 선점(preempt)됐습니다.
PodAdmissionFailedPod가 Node에서 admission을 통과하지 못했습니다.
PodStuckTerminatingPod가 Terminating 상태에 멈춰 있습니다.
PodFailedPod가 최종적으로 Failed 단계에 도달했습니다.

애플리케이션 크래시의 경우 Wave는 가능성 있는 원인도 함께 짚어줍니다. 예를 들어 ContainerCrash라면 앱의 panic이나 예외, 처리되지 않은 시그널, 잘못된 인자나 환경변수, 의존 서비스 연결 실패 중 어디를 봐야 하는지 알려줍니다.

장애 타임라인

페이지 상단은 48시간 장애 히트맵입니다. 영향을 받은 워크로드마다 한 행(그 종류, namespace, 총 인시던트 수와 함께)이 있고, 시간마다 한 칸이 있습니다.

  • 색상은 장애 종류를 나타냅니다: Container, Pod, 또는 Both.
  • 명암은 그 시간에 몇 건의 인시던트가 발생했는지를 나타내서, 크래시가 몰린 구간이 한눈에 드러납니다.

이를 통해 워크로드가 언제부터 실패하기 시작했는지, 문제가 아직 진행 중인지 이미 해소됐는지를 한눈에 볼 수 있습니다.

Pod/Container Failures 48-hour failure timeline and the affected-workload table

워크로드 목록과 드릴다운

타임라인 아래에는 영향받은 워크로드 테이블이 있습니다: Kind, Namespace, Workload(자유 텍스트 검색 가능), 건수와 함께 표시되는 Recent (24h) 인시던트 스파크라인, 그리고 Last incident의 종류와 시각(예: CrashLoopBackOff, OOMKilled, Unexpected exit 0, Container crash)입니다. 노이즈가 심한 워크로드는 Stop detection으로 감지를 끄고, Manage stopped workloads로 다시 켤 수 있습니다.

워크로드를 선택하면 상세 페이지가 열리며, 기본적으로 최근 5일 범위로 스코프됩니다.

  1. Pods with incidents는 실패한 Pod 목록을 Failure type(Container 또는 Pod), Pod Name, Containers, Incidents 건수, Last incident와 함께 보여줍니다.

  2. Incident timeline은 감지된 모든 상태 전이를 시간순으로 보여주며, 종류별로 필터링할 수 있습니다. 각 항목에는 시각, 장애 배지, 컨테이너, 그리고 Wave가 실패 순간 해당 컨테이너의 로그를 수집했음을 나타내는 Log collected 표시가 함께 붙습니다.

  3. Incident detail은 선택한 인시던트를 탭으로 구성된 패널에서 보여줍니다.

    • Overview: 무엇이 실패했고 무엇을 확인해야 하는지에 대한 평이한 설명과, 인시던트의 핵심 정보(pod, container, reason, 당시 리소스 상태)입니다.
    • Log: 실패 시점에 수집된 이전 컨테이너 인스턴스의 로그(kubectl logs --previous)이며, 원클릭 Copy를 지원합니다.
    • pod.yamlnode.yaml: 수집된 pod, node 매니페스트로, 근본 원인 분석을 한곳에서 끝낼 수 있습니다.

    탭에 점이 표시되어 있으면 Wave가 해당 인시던트의 그 아티팩트를 수집했다는 뜻입니다.

Pod/Container Failures per-pod incidents, incident timeline, and the tabbed incident detail with container log

관련 문서