DOCS/journey/troubleshooting/251201_rb8001_log_optimization.md

3.7 KiB

rb8001 로그 최적화: DEBUG 노이즈 제거, 타임아웃 재시도, 멀티라인 파싱

날짜: 2025-12-01 작성자: Claude (51124 서버 전담) 관련 파일: rb8001/app/core/logger.py, rb8001/app/router/slack_handler.py, fluent-bit/parsers.conf, fluent-bit/fluent-bit.conf


문제 상황

1. httpcore DEBUG 로그 과다

  • OpenSearch에서 httpcore DEBUG 로그가 하루 수백 건 수집됨
  • 실제 오류 로그가 묻혀 분석 어려움
  • 로그 노이즈로 인한 저장 공간 낭비

2. slack_handler.py RAG 검색 타임아웃

  • 하드코딩된 timeout=10 초과 시 실패
  • 재시도 로직 없어 일시적 네트워크 오류 시 실패
  • langgraph_document.py에는 재시도 로직 있으나 slack_handler.py에는 없음

3. Traceback 멀티라인 미수집

  • Python Traceback이 여러 줄로 나뉘어 수집됨
  • 첫 줄만 수집되어 전체 스택 추적 불가
  • 에러 분석 시 컨텍스트 부족

해결 방안

1. httpcore 로거 레벨 조정

  • rb8001/app/core/logger.py:48-51: httpcore 로거 레벨 WARNING으로 설정
    • logging.getLogger("httpcore").setLevel(logging.WARNING)
    • logging.getLogger("httpcore.connection").setLevel(logging.WARNING)
    • logging.getLogger("httpcore.http11").setLevel(logging.WARNING)
  • .env: LOG_LEVEL=INFO 설정 (서버에서 직접 수정 필요)

2. RAG 검색 타임아웃/재시도 추가

  • rb8001/app/router/slack_handler.py:355-390: 타임아웃 환경변수화 및 재시도 로직 추가
    • timeout=10timeout=float(os.getenv("RAG_SEARCH_TIMEOUT", "25"))
    • langgraph_document.py:74-90 패턴 적용 (재시도 + 백오프)
    • 환경변수: RAG_SEARCH_TIMEOUT=25, RAG_SEARCH_RETRIES=2, RAG_SEARCH_BACKOFF=1.5

3. Fluent Bit multiline 파서 추가

  • fluent-bit/parsers.conf: multiline_traceback parser 추가
    • Parser_Firstline ^Traceback 패턴으로 Traceback 시작 감지
    • Multiline On, Multiline_Flush 5 설정
  • fluent-bit/fluent-bit.conf: multiline 필터 추가
    • [FILTER] Name multiline 섹션 추가
    • multiline.key_content log, multiline.parser multiline_traceback 설정

구현 완료

  • 커밋: b406b3f (rb8001) - httpcore 로거 레벨 설정
  • 커밋: af08f8d (rb8001) - RAG 검색 타임아웃/재시도
  • 커밋: ca4f117 (fluent-bit) - multiline 파서 추가
  • 배포: rb8001 재시작 완료, fluent-bit 푸시 완료 (재시작 필요)

검증 결과

  • httpcore DEBUG 로그: 최근 5분간 0건 (이전: 96건+)
  • RAG 타임아웃: 재시도 로직 적용 완료 (테스트 대기)
  • Traceback 파싱: multiline 파서 설정 완료 (Fluent Bit 재시작 후 검증 필요)

교훈

로거 레벨 관리 원칙

  • 외부 라이브러리(httpcore, httpx 등)는 기본적으로 DEBUG 레벨 로그 생성
  • 프로덕션 환경에서는 노이즈 로거를 WARNING 이상으로 설정 필요
  • 환경변수 LOG_LEVEL과 개별 로거 레벨을 분리 관리

타임아웃/재시도 패턴 표준화

  • 외부 API 호출 시 타임아웃은 환경변수로 관리 (하드코딩 금지)
  • 재시도 로직은 일관된 패턴 적용 (langgraph_document.py 참고)
  • 백오프 전략으로 재시도 간격 점진적 증가

멀티라인 로그 파싱

  • Docker JSON 로그는 이미 파싱되어 있어 FILTER 단계에서 multiline 처리 필요
  • Traceback 같은 구조화된 멀티라인은 Parser_Firstline 패턴으로 감지
  • Fluent Bit 설정 변경 시 완전 재빌드 필수 (restart만으로는 적용 안 됨)

참고 문서

  • 251023_happybell80_rb8001_RAG_timeout_PK_sequence.md: langgraph_document.py RAG 타임아웃 해결 사례
  • 250930_claude_fluent_bit_memory_overflow_fix.md: Fluent Bit 로그 레벨 설정 사례