Skip to content

[Feat] FastAPI Health Check·RabbitMQ 안정화·모니터링 구성 #34

Description

@pearseona

🏷️ 이슈 유형

  • feat : 새로운 기능 추가
  • fix : 버그 수정
  • refactor : 동작 변경 없는 구조 개선
  • docs : README 등 문서 추가/수정
  • chore : 설정, 빌드, 의존성 패키지 변경
  • 기타 : 설명 추가 작성

💡기능

FastAPI AI Worker의 상태와 RabbitMQ 메시지 처리 가능 여부를 확인할 수 있는 Health Check를 구현합니다.

또한 안전한 종료, 이벤트 계약 검증, Prometheus 지표 및 Commit SHA 기반 이비지 배포를 구성하여 운영 중 장애 감지와 롤백이 가능하도록 합니다.

🛠️할 일 목록

  • 프로세스 생존 여부를 반환하는 /health/live 엔드포인트를 구현한다.
  • RabbitMQ 연결 및 Consumer 준비 상태를 반환하는 /health/ready 엔드포인트를 구현한다.
  • RabbitMQ 연결이 끊기거나 Consumer가 준비되지 않은 경우 readiness가 실패하도록 한다.
  • Docker 컨테이너 Health Check가 전용 Health 엔드포인트를 사용하도록 구성한다.
  • SIGTERM 수신 시 신규 메시지 소비를 중단하고 처리 중인 메시지를 정리한 뒤 RabbitMQ 연결을 종료하도록 구성한다.
  • BE의 analysis.*.v1 이벤트 스키마와 호환되는지 계약 테스트를 작성한다.
  • 정상, 부분 성공, 실패, 재시도 및 DLQ 흐름의 통합 테스트를 작성한다.
  • Prometheus 메트릭 엔드포인트 /metrics를 구성한다.
  • 전체 분석 시간, 외부 API 지연·실패·재시도, 결과 상태 및 RabbitMQ 처리 관련 지표를 추가한다.
  • 메트릭 Label에 개인정보나 고유 식별자가 포함되지 않도록 검증한다.
  • PR CI에서 테스트와 Docker 이미지 빌드 검증이 실행되도록 구성한다.
  • 운영 Docker 이미지를 Git Commit SHA 태그로 빌드하고 Registry에 Push하도록 CI를 구성한다.
  • Health Check, 메트릭 및 운영 검증 방법을 README에 작성한다.

📌 참고 사항 / 제약 조건

  • /health/live는 외부 API나 RabbitMQ 장애 때문에 실패하지 않아야 합니다.
  • /health/ready는 실제 RabbitMQ 연결과 Consumer 처리 가능 상태를 반영해야 합니다.
  • 기존 / 엔드포인트를 컨테이너 Health Check로 사용하는 구성은 전용 Health 엔드포인트로 교체합니다.
  • RabbitMQ 메시지를 처리하는 도중 컨테이너가 종료될 경우 메시지가 유실되거나 잘못 ACK 처리되지 않아야 합니다.
  • 이벤트 계약은 현재 analysis.requested.v1, analysis.completed.v1, analysis.partial.v1, analysis.failed.v1을 기준으로 합니다.
  • Prometheus Label에 analysisId, eventId, traceId, 사용자 ID, 전화번호, 메시지 원문 또는 URL을 사용하지 않습니다.
  • 운영 이미지에는 latest 태그만 사용하지 않고 Git Commit SHA 태그를 생성합니다.
  • 모니터링 시스템 자체의 배포와 Grafana 대시보드 구성은 인프라 작업 범위에서 진행합니다.

Metadata

Metadata

Assignees

Labels

featNew feature or functional additions to the application

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions