diff --git a/journey/troubleshooting/260304_51123_임시복구_서비스연속성_조치내역.md b/journey/troubleshooting/260304_51123_임시복구_서비스연속성_조치내역.md new file mode 100644 index 0000000..95a90ab --- /dev/null +++ b/journey/troubleshooting/260304_51123_임시복구_서비스연속성_조치내역.md @@ -0,0 +1,78 @@ +# 260304 51123 임시복구 서비스 연속성 조치내역 + +## 1. 목적 +- 51124 서버 장애 상황에서 51123 단독으로 robeing 핵심 서비스 연속성을 임시 복구한다. +- 2026-03-04 기준, 내일(2026-03-05) 오전 9시~10시 일정/이메일 경로 중단을 방지한다. + +## 2. 장애 징후 및 운영 영향 +- `/api/message` 응답이 3초 제한 내 타임아웃(`HTTP:000`, `curl (28)`)으로 실패. +- 게이트웨이 경유 일부 경로에서 422/500이 혼재되어 호출 신뢰도가 저하. +- PostgreSQL 연결 슬롯 고갈(Idle 세션 누적)로 신규 작업 지연. +- 51124 불가 상태로 기존 이중서버 가정(23 인프라 + 24 실행)이 깨짐. + +## 3. 확인된 근본 원인 +1. Docker 브리지 대역(`172.21.0.0/16`)에서 호스트 포트(8001, 9024, 8512) 접근이 방화벽에 막혀 내부 연계가 단절됨. +2. PostgreSQL Idle 세션 누적으로 커넥션 풀 여유가 줄어 응답 지연이 증폭됨. +3. rb8001 런타임에서 고비용 경로(의도/검색 그래프 포함)가 활성화된 상태로 느린 경로가 잦게 호출됨. +4. gateway 환경변수 일부가 운영 실IP 기준과 어긋나 헬스/검증 경로가 불안정했음. + +## 4. 실제 조치 내역(51123) +### 4.1 네트워크/방화벽 +- UFW allow 규칙 추가: + - `from 172.21.0.0/16 to any port 8001 proto tcp` + - `from 172.21.0.0/16 to any port 9024 proto tcp` + - `from 172.21.0.0/16 to any port 8512 proto tcp` + +### 4.2 데이터베이스 +- Idle 커넥션 92건 정리(`pg_terminate_backend`)로 슬롯 회복. +- 즉시 재접속 정상화 확인. + +### 4.3 rb8001 성능 안전모드(임시) +- `/home/admin/rb8001/.env` 오버라이드 적용: + - `INTENT_ENGINE=v1` + - `INTENT_USE_LANGGRAPH=false` + - `INTENT_USE_COT=false` + - `WEB_SEARCH_USE_GRAPH=false` +- 적용 방식: `docker compose down && docker compose up -d --build` + +### 4.4 gateway 운영값 정합화 +- `/home/admin/robeing-gateway/.env` 수정: + - `ROBEING_DEFAULT_HOST=192.168.219.45` + - `MONITOR_URL="http://192.168.219.45:9024"` +- 적용 방식: `docker compose down && docker compose up -d --build` + +## 5. 검증 결과(2026-03-04) +1. 컨테이너 상태 +- `robeing-gateway(8100)`, `rb8001(8001)`, `robeing_monitor(9024)`, `skill-calendar(8512)`, `skill-email(8501)` running 확인. + +2. 헬스/응답 +- gateway `/healthz` 200. +- gateway `/api/message` 정상 응답 복구(측정 약 0.5~1.7초 구간). + +3. 핵심 기능 +- 일정성 문구 포함 메시지 요청 시 응답 정상. +- `self-improvement`, `prompt-db`는 유효 스키마 요청에서 성공, 비유효 payload는 기대대로 422/500. + +4. 이메일 경로(내일 9~10시 핵심) +- `skill-email` `/health` 200. +- rb8001 컨테이너 -> skill-email 내부 호출 200. +- NaverWorks 메일 리스트 API(실 UUID `3550cef6-63e1-4ceb-8802-a25c9d1c6917`) 200, 목록 수신 확인. + +5. 스케줄 DB +- `scheduled_jobs` 활성 항목 확인: + - `naverworks_daily`: `0 9 * * mon-fri` + - `coldmail_daily`: `5 9 * * mon-fri` + - `daily_headlines`: `10 9 * * mon-fri` + - `companyx_news`: `0 10 * * mon-fri` + +## 6. 잔여 리스크 및 운영 주의 +- `skill-embedding(8515)` 미기동 상태는 지속. rb8001 로그에 임베딩 연결 에러가 간헐적으로 남을 수 있음. +- 현재 복구는 "핵심 연속성 확보" 기준의 임시 안정화이며, 51124 복구 후 원래 분리구조로 되돌리는 재배치가 필요. +- 스케줄 실행 직전/직후(2026-03-05 08:55~10:10) 구간 모니터링을 강화해야 함. + +## 7. 24 서버 인계 메모 +- 51124 복구 후 우선순위: + 1. rb8001/skill/chromadb 원복 배치 + 2. gateway 대상 upstream 재점검 + 3. 임시 성능 플래그(`INTENT_USE_LANGGRAPH=false` 등) 단계적 해제 여부 성능 측정 후 결정 +- 본 문서는 51123 임시복구 기준 운영 기록이며, 24 원복 시 별도 후속 문서로 분리 기록 권장.