# 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=10` → `timeout=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 로그 레벨 설정 사례