Skip to content

[Feat] Embedding Circuit 상태와 지연 재시도 대기열 관측성 추가 - #408

Merged
Gimini-3 merged 17 commits into
developfrom
feature/406
Oct 3, 2026
Merged

Gimini-3 merged 17 commits into
developfrom
feature/406

Conversation

@Gimini-3

@Gimini-3 Gimini-3 commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor

🔍️ 작업 내용

  • Embedding Provider Circuit이 JVM 메모리에만 있어 보호 상태와 회복 결과를 외부에서 판단할 수 없었습니다.
  • 최초 OPEN 후 트래픽이 없으면 HALF_OPEN으로 전환되지 않는데, OPEN 상태만 보는 경보는 이 유휴 JVM도 Provider 장애가 지속된 것으로 판정할 수 있었습니다.
  • Half-open Probe 결과, 현재 보호 주기의 실패 상태, 최근 실패 증거를 함께 사용해 실제 Probe 실패 후에만 Circuit 경보가 발생하도록 보완했습니다.
  • Probe 실패 후 트래픽이 끊겨도 오래된 실패 한 건이 경보를 무기한 유지하지 않도록 최근 6분의 Counter 증가를 요구합니다.
  • 재시도 시각이 미래인 Job은 claimable 대기열에 포함되지 않아 0건처럼 보이던 문제를 delayed retry Gauge로 분리했습니다.

Closes #406

✨ 상세 설명

  • docgrid.embedding.provider.circuit.open Gauge는 OPEN·HALF_OPEN에서 1, CLOSED에서 0을 유지합니다.
  • docgrid.embedding.provider.circuit.transitions{state=...} Counter는 OPEN·HALF_OPEN·CLOSED 전환을 기록합니다.
  • docgrid.embedding.provider.circuit.probe{outcome="success|failed"} Counter는 Half-open Probe 결과를 직접 세며, 두 시계열을 시작 시 0으로 등록해 첫 결과도 관측합니다.
  • docgrid.embedding.provider.circuit.probe.failed Gauge는 현재 Circuit 보호 주기에서 Probe 실패가 확인되면 1, 성공 Probe가 Circuit을 닫으면 0이 됩니다.
  • 경보는 같은 instance, cluster, environment의 OPEN Gauge, 현재 주기 Probe 실패 Gauge, 최근 6분의 실패 Counter 증가가 모두 있을 때만 Pending을 시작합니다. 이 조건이 1분간 유지되면 Cluster별 한 건을 알립니다.
  • 현재 주기는 Gauge가 구분하므로 이전 Circuit 주기의 실패가 새로운 최초 OPEN에 섞이지 않고, 6분 Counter 시간 창은 트래픽 중단 뒤 오래된 실패 증거를 만료시킵니다.
  • 6분은 기본 INDEXING_WORKER_RETRY_MAX_DELAY=5m보다 길어 5분 간격의 연속 Probe 실패 중에는 경보가 유지됩니다. 최대 재시도 지연을 늘리는 환경은 이 시간 창도 함께 조정해야 합니다.
  • PENDING AND next_retry_at > observedAt인 Job을 docgrid.embedding.delayed.retry.jobs Gauge로 분리했습니다.

🔄 동작 변화

수정 전
최초 OPEN → 이후 호출 없음 → OPEN Gauge 1 유지 → 장애 지속 경보가 무기한 유지될 수 있음

수정 후
최초 OPEN → Probe 없음                       → 무경보
최초 OPEN → Half-open Probe 실패             → 조건이 1분 유지되면 경보
경보 중    → Half-open Probe 성공             → CLOSED 즉시 해제
경보 중    → 이후 호출 없음                  → 최근 실패 증거가 6분 창에서 빠지면 해제
장애 지속  → 최대 5분 간격으로 Probe 재실패 → 최근 실패 증거 갱신, 경보 유지
이전 실패  → CLOSED → 새로운 최초 OPEN       → 이전 보호 주기 결과 미전파

트래픽이 끊겨 6분 뒤 해제되는 것은 Provider 회복을 확인했다는 뜻이 아니라, 최근 실패 증거가 만료됐다는 뜻입니다. Provider Down·NotReady는 별도 경보가 담당합니다.

✅ 검증

  • 전체 Backend 테스트: 220 Suite, 1,305건, 실패 0건, 오류 0건, 건너뜀 2건
  • Circuit 단위 테스트: 최초 OPEN, Probe 성공·실패, 실패 뒤 성공 시 Gauge 복구, 결과 미기록 소유권 반환 경계 통과
  • Management 통합 테스트: Probe Counter·실패 Gauge의 /actuator/prometheus 노출 통과
  • Prometheus 설정: 3개 Rule 파일, 20개 Rule 문법 검사 통과
  • Prometheus Rule Test: Backend·Pipeline·Operational 3개 파일 전체 통과
  • 경보 시나리오: 최초 OPEN 무경보, Probe 실패 후 발생, CLOSED 즉시 해제, 단일 실패 6분 만료, 5분 간격 재실패 중 유지, 이전 주기 미전파 통과
  • docker compose config --quiet 통과

💬 리뷰 요청사항

  • probe_failed Gauge로 현재 보호 주기를 구분하고 최근 6분 Counter 증가로 실패 증거의 유효 기간을 제한한 계약이 적절한지 확인 부탁드립니다.
  • 운영에서 INDEXING_WORKER_RETRY_MAX_DELAY를 5분보다 늘릴 때 Prometheus 시간 창도 함께 조정해야 한다는 설정 관계가 충분히 드러나는지 확인 부탁드립니다.
  • JVM별 시계열을 on (instance, cluster, environment)로 일치시킨 뒤 Cluster 단위로 max 집계하는 것이 운영 단위와 맞는지 확인 부탁드립니다.
  • 지연 재시도 집계의 시간 경계(next_retry_at > observedAt)와 기존 claimable 집계가 겹치거나 비는 구간이 없는지 확인 부탁드립니다.

@coderabbitai

coderabbitai Bot commented Oct 3, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Repository: DocGrid/docgrid/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c6b6ce7b-5b95-4e0f-9ecc-96b64938c963
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Gimini-3
Gimini-3 merged commit d524f87 into develop Oct 3, 2026
2 checks passed
@Gimini-3 Gimini-3 self-assigned this Oct 3, 2026
@Gimini-3 Gimini-3 added the ✨ Feature 기능 개발 label Oct 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature 기능 개발

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] Embedding Circuit 상태와 지연 재시도 대기열 메트릭 추가

1 participant