[BE-05] TelemetryQueryGatewayImpl (Prometheus/Loki/Tempo 조회)
작업 내용 (설계 의도)
변경 사항
TelemetryQueryGateway(BE-01 interface)를 구현해 10분 lookback 텔레메트리 스냅샷을 구성한다(FR-4). 근거 TDD: ../TDD.md §Detail Design·§실패경로. ⑤ 데이터소스(Prometheus :9090·Loki :3100·Tempo :3200) 재사용.
infrastructure/alerting/gateway/TelemetryQueryGatewayImpl.kt—queryContext(signal, lookback)에서 PromQL(P95·에러율 요약)·LogQL(에러 로그 샘플)·TraceQL(느린 trace 샘플)을 각각 RestClient로 조회해TelemetrySnapshot병합.- 부분 실패 허용: 소스별 try/catch, 실패 섹션은 빈 값(전체 예외 미전파).
- 각 base-url은
TelemetryProperties(@ConfigurationProperties) 신규로 주입. RestClient는ExternalRestClientFactory사용.
의존
- BE-01 (TelemetryQueryGateway interface, TelemetrySnapshot, AlertSignal)
다이어그램
처리 흐름
sequenceDiagram participant G as TelemetryQueryGatewayImpl participant P as Prometheus participant L as Loki participant T as Tempo G->>P: PromQL P95/에러율 (10m) G->>L: LogQL 에러 로그 샘플 G->>T: TraceQL 느린 trace 샘플 G-->>G: TelemetrySnapshot 병합(부분실패 허용)
테스트 케이스
- 3종 소스가 정상 응답하면 metricsSummary·logSamples·traceSamples가 채워진다(mock 서버).
- Loki 조회가 5xx여도 예외 없이 logSamples만 빈 값이고 나머지는 채워진다(부분 실패).
- lookback 10분이 각 쿼리의 시간 범위 파라미터에 반영된다.
- 모든 소스 실패 시에도 빈 TelemetrySnapshot을 반환하고 예외를 던지지 않는다.