ADR-002 메트릭 수집 = Prometheus 직접 scrape, trace·log만 Collector
- 상태: 채택
- 날짜: 2026-07-03
- 근거: PRD FR-1, FR-3, FR-4 / TDD “Possible Solutions — 메트릭 수집 경로”
맥락
FR-3은 “단일 Collector가 trace→Tempo·metric→Prometheus·log→Loki 라우팅”을 명시하고, 동시에 FR-1은 “/actuator/prometheus 엔드포인트 재사용”을, FR-4는 “Prometheus가 exporter 메트릭을 수집”을 명시한다. 앱·exporter 메트릭을 Collector로 밀지, Prometheus가 직접 당길지 결정이 필요하다.
결정
- 메트릭 주 경로 = Prometheus 직접 scrape: 앱
/actuator/prometheus·exporter 3종/metrics·Collector self:8888·Prometheus self를 Prometheus가 pull한다. - trace·log = OTel Collector: 앱이 OTLP로 Collector에 발신 → Collector가 trace→Tempo·log→Loki 라우팅.
- Collector→Prometheus remote_write 경로는 열어둠: Collector가 OTLP로 받은 소량 메트릭·exemplar를
prometheusremotewrite로 넘겨 FR-3 문구를 충족하되, 주 메트릭 경로는 아니다.
근거
- FR-1 정합 —
/actuator/prometheus재사용은 scrape 모델이 전제. Collector로 push하면 엔드포인트 재사용이 아니라 새 경로가 된다. - 장애 격리 — 메트릭(scrape)과 trace(push)를 분리하면 Collector 다운 시에도 메트릭 수집이 계속된다(User Scenario 4의 self-scrape 감지 전제 충족). 단일 경로는 Collector가 메트릭까지 SPOF가 된다.
- exporter는 본래 scrape 모델 — mysqld/redis/kafka exporter는
/metricspull이 표준. Collector 경유는 불필요한 홉.
대안 (미채택)
- 모든 텔레메트리를 Collector 단일 경로(OTLP push→remote_write): 아키텍처는 단순하나 Collector SPOF·FR-1 위반. 미채택(단, remote_write 보조 경로만 유지).
영향
prometheus.yml에 scrape 잡 6종(app·mysqld·redis·kafka·collector·self).env는 relabel로 부여(인프라 exporter) 또는 앱 태그(app) 사용.- Collector config는 trace/log receiver→exporter + remote_write exporter만.
- ⑦(다중 인스턴스)는 app scrape 잡의 타깃 목록을 확장하면 됨(구조 제공).