3.7 KiB
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=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 로그 레벨 설정 사례