RCA 2026.07.04 4 min read

RCA 품질을 감으로 판단하지 않기: Evidence Quality와 회귀 게이트

RCA 신호와 별도로 Evidence의 신선도, Collector 상태, Agent health를 평가했다. 보고서의 신뢰 범위를 표시하고 golden scenario와 회귀 기준을 함께 관리했다.

신호가 검출됐다고 바로 원인이라고 말할 수는 없다

초기 Rule Engine은 disk.root_usage_percent=96을 임계값과 비교해 disk_usage_critical 같은 신호를 만들었다. 같은 입력에서 같은 결과는 얻을 수 있었지만, 입력이 현재 상태를 제대로 담고 있는지도 확인해야 했다.

  • Evidence가 2시간 전에 수집된 값일 수 있다.
  • 필요한 Collector 일부가 권한 문제로 실패할 수 있다.
  • Agent는 살아 있지만 특정 로그 경로만 읽지 못할 수 있다.
  • 필드 이름이나 타입이 Agent 버전에 따라 달라질 수 있다.
  • 정상 경계값을 장애로 오판할 수 있다.

수집하지 못한 항목을 정상으로 취급하면 confidence를 잘못 높일 수 있었다. Signal Detection과 별도로 Evidence Quality를 계산하기로 했다.

Collector 계약부터 고정하기

Node Agent의 14개 Collector와 Backend 사이에 collector-evidence/v1 계약을 정의했다. 필드의 타입, alias, 단위, 필수 여부를 정했다.

알려진 alias는 canonical 필드로 복사했다. 잘못된 타입을 임의로 숫자로 바꾸지는 않았다. 등록되지 않은 Collector도 삭제하지 않고 unknown으로 기록했다.

Agent raw output
  → schema version 확인
  → alias 정규화
  → 타입 검증
  → 원본 유지
  → detector 입력 생성

계약 위반 시에도 Report는 남겼다. invalid_collector_count, unknown_collector_count, Collector별 상태를 Evidence에 기록해 원본 값과 Agent 버전을 확인할 수 있게 했다.

Evidence Quality에 포함한 항목

품질은 다음 세 영역으로 평가했다.

  1. Freshness: 수집 시각과 현재 시각의 차이
  2. Collector status: 예상 Collector의 누락·실패·degraded 여부
  3. Agent health: 수집 Agent가 정상 heartbeat 상태인지

결과를 complete, partial, stale, insufficient 상태와 점수로 표현했다. 오래된 Evidence나 실패한 Collector에는 confidence penalty를 적용하고, 이미 검출한 Rule signal은 유지했다.

과거의 디스크 신호를 남기는 것과 현재도 장애가 지속된다고 판단하는 것을 구분하려는 처리다.

Report Quality Gate

Evidence Quality, Rule signal 수, 높은 confidence 신호 수와 최상위 원인 후보 점수를 조합해 Report Quality Gate를 만들었다.

상태 의미
pass 초기 RCA 결론으로 사용할 근거가 충분함
limited 결론은 참고할 수 있지만 추가 수집이나 확인이 필요함
insufficient 원인 결론보다 수집 공백으로 다뤄야 함

pass도 조치 실행 권한을 뜻하지 않도록 했다. 모든 Action의 정책 분류는 Policy Engine이 별도로 맡았다.

limited에서는 LLM이 confidence를 올리지 못하게 하고 stale 또는 failed Collector의 재수집을 안내했다. insufficient는 결론을 내릴 근거가 부족한 상태로 표시했다.

회귀 테스트를 수치로 만들기

Rule 하나를 추가하면서 정상 입력의 false positive가 늘 수 있어 golden scenario에 precision, recall, Top-K 기준을 붙였다.

Micro precision >= 0.90
Micro recall >= 0.95
Top-1 expected signal hit >= 0.90
Top-3 expected signal hit >= 0.95

실제 Agent E2E 구조를 비식별화한 production-like corpus도 분리했다. 정상 containerd와 CRI-O, 임계값 직전 값, disk·DNS·etcd 복합 장애, journal 접근 실패와 file fallback을 포함했다.

Gate가 실패하면 artifact에서 false positive와 false negative 사례를 확인하도록 했다. 통과를 위해 임계값을 낮추기보다 Detector와 fixture의 기대값부터 검토했다.

이 구조를 선택한 이유

불완전한 수집 결과를 확정적인 결론처럼 보여주지 않도록 다음 항목을 함께 표시했다.

  • 수집 계약이 맞는가
  • 데이터가 최신인가
  • 필요한 Collector가 모두 동작했는가
  • Rule 결과가 회귀 기준을 통과했는가
  • 결론을 어느 수준까지 신뢰할 수 있는가

unknown과 limited를 남겨 추가로 확인할 범위를 알 수 있도록 했다.

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

SEARCH JOURNAL

기록 검색

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

검색을 준비하고 있어요.

검색어를 입력해 주세요.

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