RCA 2026.07.22 4 min read

3노드 Agent Fleet를 1시간·5시간 검증하며 본 것

Kind의 Agent 3개를 1시간과 5시간 반복 관측했다. 수집 성공률, RSS 추세, 프로세스 재시작, spool 상태를 함께 확인하고 결과가 적용되는 범위를 남겼다.

한 번 성공한 Agent가 5시간 뒤에도 정상인지는 별개의 문제다

Agent E2E가 한 번 통과한 뒤에도 장시간 실행에서 확인할 항목이 남았다.

  • Collector 반복 실행 중 메모리가 계속 증가하는가
  • file descriptor와 thread가 누적되는가
  • 전송 실패 payload가 spool에 쌓이는가
  • 한 노드만 느리거나 degraded 상태가 되는가
  • Pod가 재시작됐는데 수집 성공률만 정상으로 보이지 않는가

시간에 따른 Agent 상태를 관측하려고 Operational Burn-in을 만들었다.

검증 Profile

Profile 반복 간격 목적
smoke 3 1초 설치와 계약 확인
standard 60 60초 1시간 기준선
extended 300 60초 5시간 장기 표본
production 1,440 60초 24시간 별도 검증

일반 CI에는 smoke를 넣고, standard와 extended는 승인된 별도 Workflow로 분리했다. 일반 개발 검증 시간을 늘리지 않고 장기 실행 결과를 별도 artifact로 남기려는 구성이다.

무엇을 관측했나

Ready 상태인 DaemonSet Pod 안에서 정해 둔 read-only 관측 코드만 실행했다.

  • RSS와 CPU 추세
  • file descriptor와 thread 수
  • 프로세스 시작 tick을 이용한 재시작 감지
  • spool 파일 수·크기와 quarantine
  • 수집 성공률과 Evidence schema 품질
  • degraded Collector 비율
  • 수집 p50·p95와 최대 payload

사용자가 입력한 shell은 실행하지 않았다. 환경 변수와 spool 본문도 artifact에서 제외했다.

메모리 증가량만 보지 않은 이유

Python 런타임과 Collector cache는 워밍업 중에 RSS가 늘 수 있다. 시작과 종료 값만 비교하면 이 증가를 메모리 누수로 잘못 볼 수 있었다.

장시간 Profile은 앞 50%를 warm-up으로 제외하고 다음 값을 계산했다.

  • 후반 구간 RSS 선형 기울기
  • 최대·최소 범위
  • 연속 증가 횟수
  • 마지막 10개와 30개 표본의 범위

전체 증가량 Gate도 유지했다. 시작 직후의 급증과 후반의 지속 상승을 각각 확인하려고 했다.

3노드 Fleet 검증

1 control-plane과 2 worker로 Kind Cluster를 만들고 Agent 3개를 같은 반복 구간에서 병렬 관측했다. Pod 이름은 artifact에 저장하지 않고 run별 salt를 적용한 HMAC 기반 target_id로 바꿨다.

1시간 Standard 결과는 다음과 같았다.

  • checkpoint 60/60
  • Agent Evidence 180/180
  • 3개 Target 모두 통과
  • 수집 성공률과 Evidence Quality 100%
  • degraded Collector 0%
  • 수집 p95 15.146초
  • runtime, spool, quarantine 오류 0

5시간 Extended에서는 다음 결과를 기록했다.

  • checkpoint 300/300
  • Agent Evidence 900/900
  • 수집 p50 8.073초, p95 14.937초
  • 최대 payload 18,789 bytes
  • 후반 RSS 기울기 -0.421~0.835 MiB/hour
  • 최악 연속 RSS 증가 3회
  • process identity 안정
  • spool과 quarantine 0

회귀를 비교하기 전에 Standard와 Extended의 Platform, architecture, Agent version, Collector, threshold 지문이 같은지 확인했다.

숫자를 과장하지 않기

이 수치는 해당 Commit을 3노드 Kind에서 실행한 기준선이다. 실제 운영 정확도나 다른 Kubernetes 배포판의 성능까지 검증한 결과는 아니다.

이 표본만으로 공통 threshold를 낮추지는 않았다. 당시 다음 검증으로 남긴 것은 별도 승인 세션의 24시간 Production Profile과 managed Kubernetes canary였다.

검증 구조를 만든 이유

5시간 실행 결과를 다시 비교할 수 있도록 Agent 버전, 설정, 수집 횟수, 자원 추세와 판정 기준을 함께 남겼다.

기능 테스트와 장기 관측을 분리했다. 이후에는 같은 조건의 표본이 쌓였는지 먼저 확인하고 안정성을 판단하려고 했다.

프로젝트 저장소: Kubernetes Cluster Infra RCA Platform

SEARCH JOURNAL

기록 검색

글 제목, 요약, 태그에서 찾습니다.

검색을 준비하고 있어요.

검색어를 입력해 주세요.

    Ctrl/⌘ K 검색 Esc 닫기 ↑ ↓ 결과 이동