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

