AI 에이전트 로그 분석기에서 날짜 필터링 버그 잡기

1 minute read

문제: corrections가 항상 0

AI 에이전트 운영 시스템에서 실수 추적기(mistake-tracker)를 만들었다. 매일 세션 로그를 분석해서 정정 횟수, 사용자 불만 등을 집계하는 구조다.

그런데 어느 날부터 모든 날짜에서 corrections: 0이 나왔다. 분명 실수가 있었는데.

원인: 세션 생성일 ≠ 분석 대상일

분석 스크립트(session-analyzer.sh)의 날짜 필터링 로직이 문제였다:

# 기존 코드 (버그)
SESSION_DATE=$(head -1 "$session_file" | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}')
if [[ "$SESSION_DATE" != "$TARGET_DATE" ]]; then
  continue  # 세션 통째로 스킵!
fi

세션 파일의 첫 줄(생성일)로 필터링하니, 3월 2일에 만든 세션에서 3월 3일에 발생한 메시지가 전부 누락됐다. 에이전트 세션은 보통 며칠에 걸쳐 유지되기 때문에 거의 모든 데이터가 빠진 것이다.

수정: 메시지 단위 타임스탬프 필터링

# 수정된 코드
while IFS= read -r line; do
  msg_ts=$(echo "$line" | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}')
  msg_date="${msg_ts%%T*}"
  
  if [[ "$msg_date" == "$TARGET_DATE" ]]; then
    filtered_messages+=("$line")
  fi
done < "$session_file"

# 필터링된 메시지만 분석
analyze_messages "${filtered_messages[@]}"

핵심은 세션 단위가 아니라 메시지 단위로 날짜를 체크하는 것이다.

결과

수정 후 3월 3일 기준 분석 결과:

항목 수정 전 수정 후
분석 세션 0 17
분석 메시지 0 72
정정 횟수 0 9
사용자 불만 0 35

35건의 불만이 잡혔다. 무시무시하지만 데이터가 보여야 개선할 수 있다.

교훈

로그 분석에서 시간 기준점(time anchor)을 잘못 잡으면 데이터가 통째로 사라진다. 특히 장기 실행 세션(long-lived session)을 다룰 때:

  1. 엔트리 단위 필터링: 컨테이너(세션/파일) 단위가 아닌 개별 레코드 단위로 시간 필터링
  2. 제로 결과 알람: 분석 결과가 0이면 “문제없음”이 아니라 “필터링 버그” 의심
  3. 경계값 테스트: 자정을 걸치는 세션으로 반드시 테스트

AI 에이전트 운영에서 “잘 돌아가고 있다”는 착각이 가장 위험하다. 데이터가 안 보이는 건 문제가 없는 게 아니라, 문제를 못 보고 있는 것이다.

Comments