[BE-12] Observability 지표 발신 (게이지·부트스트랩·전파 지연)

작업 내용 (설계 의도)

변경 사항

PRD Operations·NFR·Success Metrics를 발신 가능하게 지표를 조작화한다(senior-pm 정합 #2). 카운터(평가·캐시 접근)와 redis-degraded 경보는 각 소유 티켓(BE-06 평가, BE-03 캐시/pub-sub)에서 발신하고, 본 티켓은 게이지·전파 지연·부트스트랩 경보를 발신한다. 근거 TDD: ../TDD.md Observability “본 과제가 발신하는 지표·경보”. 임계 경보 규칙·대시보드 패널은 형제 과제(⑦·⑥)가 지표를 소비해 구성 — 본 과제는 정확한 발신까지 책임(경계).

  • FeatureFlagMetricsBinder (infrastructure, MeterRegistry 바인딩): 게이지 feature_flag_local_snapshot_size(LocalStore 크기), feature_flag_bootstrap_success(부트스트랩 성공 1/0), feature_flag_pubsub_listener_active(RedisMessageListenerContainer 리스닝 여부), feature_flag_pubsub_connections(전용 구독 커넥션 수) — 리스너 스레드/커넥션 누수·미기동 조기 발견(NFR).
  • 전파 지연 게이지 feature_flag_propagation_lag_seconds: BE-03 subscriber가 기록한 최근 전파 지연(occurredAt→수신)을 게이지/타이머로 노출.
  • 부트스트랩 실패 시 critical 경보(source=feature-flag) 발신.
  • 지표 소비(임계 알림·대시보드)는 형제 과제 위임 — 본 티켓은 발신만.
  • 독립 파일(신규)이라 wave 4 병렬 배치. BE-03/BE-06 파일은 수정하지 않고 이미 발신된 값을 게이지로 읽거나 자체 게이지를 등록.

의존

  • BE-03 (LocalStore·pub/sub 리스너·전파 지연 기록)
  • BE-06 (평가 경로 — 카운터는 BE-06 소유, 본 티켓은 게이지)

다이어그램

클래스 의존

flowchart LR
    Binder["FeatureFlagMetricsBinder"] --> Registry["MeterRegistry"]
    Binder --> Local["LocalFeatureFlagStore"]
    Binder --> Listener["RedisMessageListenerContainer"]

테스트 케이스

  • 로컬 스냅샷 크기 게이지가 적재된 플래그 수를 반영한다
  • 부트스트랩 성공 시 bootstrap_success 게이지가 1, 실패 시 0이 되고 critical 경보가 발신된다
  • pub/sub 리스너가 기동 상태면 listener_active 게이지가 1이다
  • 전파 지연 게이지가 최근 수신 전파 지연 값을 노출한다
  • 전용 구독 커넥션 수 게이지가 0보다 크다(리스너 기동 후)