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.nameresource attribute가 누락된 텔레메트리는 unknown_service로 분류돼 유실되지 않는다.