STK-OBS-04 OTel Collector 게이트웨이 fan-out 구성

작업 내용

단일 OpenTelemetry Collector를 docker-compose.otel.yml로 띄워, 서비스가 보낼 OTLP를 수신하고 SigNoz·Grafana 양쪽으로 fan-out한다(ADR-003). 이 티켓이 두 백엔드(STK-OBS-02·03)와 인프라 exporter(STK-OBS-01)를 잇는 연관 병목이라 단독 wave로 둔다.

Collector 파이프라인:

  • receivers: OTLP(gRPC 4317 / HTTP 4318), prometheus(STK-OBS-01 exporter scrape)
  • exporters: traces → SigNoz OTLP + Tempo OTLP / metrics → SigNoz + Prometheus remote-write / logs → SigNoz + Loki
  • 서비스가 사용할 표준 OTLP 엔드포인트·resource attribute(service.name) 규약을 이 티켓에서 확정한다(STK-OBS-05~08의 공통 계약).

롤백: docker compose -f docker-compose.otel.yml down. 서비스는 OTLP 전송 실패 시 graceful degrade로 영향 없음.

다이어그램

처리 흐름

sequenceDiagram
    participant Svc as 서비스(4종)
    participant COL as Collector
    participant SN as SigNoz
    participant TEMPO as Tempo/Loki
    participant PROM as Prometheus
    Svc->>COL: OTLP (trace/metric/log)
    COL->>COL: batch·resource 처리
    COL->>SN: fan-out
    COL->>TEMPO: fan-out (trace/log)
    COL->>PROM: remote-write (metric)
    COL->>PROM: exporter scrape (infra)

컴포넌트 의존

flowchart LR
    COL["OTel Collector"]
    OTLP["OTLP receiver"]
    PRECV["prometheus receiver"]
    SN["→ SigNoz"]
    GRAF["→ Tempo/Loki"]
    PROM["→ Prometheus"]
    OTLP --> COL
    PRECV --> COL
    COL --> SN
    COL --> GRAF
    COL --> PROM

테스트 케이스

  • 서비스가 OTLP를 보내면 동일 텔레메트리가 SigNoz·Grafana 양쪽에 도착한다(fan-out 동등성).
  • Collector가 STK-OBS-01 exporter를 scrape해 인프라 메트릭을 양 스택에 전달한다.
  • 한쪽 백엔드(예: SigNoz)가 다운돼도 다른 쪽(Grafana) 전송은 계속된다(부분 실패 격리).
  • Collector 자체 다운 시 서비스 export가 실패해도 앱 요청 처리는 정상이다(graceful degrade).
  • service.name resource attribute가 누락된 텔레메트리는 unknown_service로 분류돼 유실되지 않는다.