Skip to content

Replace DataDog/Terraform with open-source monitoring stack#76

Merged
lsh1215 merged 15 commits intodevelopfrom
fix/monitoring-tools
Feb 7, 2026
Merged

Replace DataDog/Terraform with open-source monitoring stack#76
lsh1215 merged 15 commits intodevelopfrom
fix/monitoring-tools

Conversation

@lsh1215
Copy link
Member

@lsh1215 lsh1215 commented Feb 6, 2026

Summary

DataDog + Terraform 기반 모니터링/인프라를 오픈소스 스택으로 전면 교체하고, 로컬 테스트 환경을 정비합니다.

주요 변경사항

1. DataDog/Terraform 제거

  • DataDog agent, datadog.env.example, ddtrace 의존성 제거
  • Terraform 전체 디렉토리 삭제 (terraform/)
  • Makefile 삭제

2. 오픈소스 모니터링 스택 구축 (docker-compose.monitoring.yml)

서비스 역할
OTel Collector 트레이스/메트릭 수집 허브 (OTLP gRPC/HTTP)
Jaeger 분산 트레이싱
Prometheus 메트릭 수집/저장 (6개 scrape target)
Grafana 통합 대시보드 (데이터소스 자동 프로비저닝)
Loki + Promtail 로그 집계 (Docker SD, trace_id 추출)
cAdvisor 컨테이너 메트릭 (Linux only, profiles: [linux])
mysqld-exporter MySQL 메트릭
celery-exporter Celery 큐/태스크 메트릭
K6 부하 테스트 (on-demand, profiles: [loadtest])

3. OpenTelemetry 계측

  • ddtraceopentelemetry-distro + 자동 계측 패키지 (django, celery, pymysql, requests, logging)
  • opentelemetry-instrument CLI로 Gunicorn/Celery 자동 계측
  • 로그 포맷에 trace_id/span_id 주입 (Loki↔Jaeger 연동)
  • defaults dict 추가로 OTel 없이도 KeyError 방지

4. docker-compose.monitoring.yml 안정성 개선

  • celery-exporter: 잘못된 depends_on: prometheus 제거, restart: unless-stopped 추가
  • mysqld-exporter: restart: unless-stopped 추가 (cross-file 의존성 처리)
  • cAdvisor: profiles: [linux] — macOS에서 자동 제외
  • K6: 미사용 MQTT env vars 제거

5. 부하 테스트 스크립트

  • docker/k6/load-test.js — HTTP REST API 부하 테스트 (k6)
  • docker/k6/mqtt-load-test.py — IoT 파이프라인 시뮬레이션 (Python paho-mqtt)

6. Loki 설정 수정

  • max_global_streams_per_user: 10000 — 429 Too Many Requests 해결
  • ingestion_burst_size_mb: 16, ingestion_rate_mb: 8

7. 문서 정리

  • docs/PERFORMANCE_TEST.md 삭제 (존재하지 않는 파일 참조하는 허상 문서)
  • docs/PERFORMANCE_TEST_GUIDE.md 신규 — 실제 동작하는 테스트 가이드
  • docs/MONITORING.md 신규 — 모니터링 스택 가이드
  • docs/DEPLOYMENT.md 업데이트 — GCP 멀티 인스턴스 아키텍처
  • docker/rabbitmq/rabbitmq.conf, enabled_plugins 삭제 (미사용 dead 파일)

변경 통계

38 files changed, +3,169, -3,198

Commits (8)

  1. 2e92f01 Remove DataDog agent, Terraform, and Makefile
  2. b5e5486 Replace ddtrace with OpenTelemetry and django-prometheus
  3. 00773d8 Add open-source monitoring stack with docker-compose.monitoring.yml
  4. 232966e Add monitoring docs and update performance test guide
  5. e3b5dca Update deployment guide for multi-instance GCP architecture
  6. 4b1dd82 Fix OTel logging crash when running without opentelemetry-instrument
  7. b65bb1e Add load test scripts and fix Loki ingestion limits
  8. 846f4e0 Clean up monitoring stack and replace performance test docs

Test plan

  • docker compose -f docker-compose.yml -f docker-compose.monitoring.yml up -d 정상 기동
  • Prometheus 타겟 5/5 UP (django, otel-collector, rabbitmq, mysql, celery)
  • Jaeger에 speedcam-api, speedcam-ocr 트레이스 수집 확인
  • Loki 로그 수집 확인 (429 에러 없음)
  • MQTT 파이프라인 테스트: 600+ messages → 전체 completed
  • MQTT 스모크 테스트: 10 messages → 0% error, 전체 pipeline 동작
  • macOS에서 cAdvisor 자동 제외 확인 (profiles: linux)
  • celery-exporter/mysqld-exporter restart policy 동작 확인
  • pytest 전체 테스트 통과

DataDog 모니터링과 Terraform IaC를 제거하고 오픈소스 모니터링 스택으로
전환하기 위한 정리 작업. datadog-agent 서비스 블록 및 관련 env 파일 삭제,
.gitignore에서 Terraform 항목을 모니터링 볼륨 항목으로 교체.
ddtrace를 제거하고 opentelemetry-instrument로 자동 계측 전환.
django-prometheus 미들웨어와 /metrics 엔드포인트 추가.
로그 포맷에 trace_id/span_id 삽입하여 Loki-Jaeger 연동 지원.
OTel Collector, Jaeger, Prometheus, Grafana, Loki, Promtail, cAdvisor,
mysqld-exporter, celery-exporter, k6 서비스로 구성된 모니터링 스택 추가.
RabbitMQ prometheus 플러그인 연동, Grafana 데이터소스 자동 프로비저닝,
Loki에서 trace_id 클릭 시 Jaeger 트레이스 연결 지원.
…stack

MONITORING.md 신규 작성: 아키텍처, PromQL 쿼리 모음, OTel 계측 상세,
로그-트레이스 연동, GCP 멀티 인스턴스 배포 가이드 포함.
PERFORMANCE_TEST.md에서 DataDog/InfluxDB 참조를 Prometheus/Grafana로 교체,
k6 결과를 Prometheus remote write로 전송하도록 업데이트.
Add defaults for otelTraceID/otelSpanID in log formatter to prevent
KeyError in services not wrapped by opentelemetry-instrument (e.g. Flower).
- Add k6 HTTP load test (load-test.js) for REST API endpoints
- Add MQTT load test (mqtt-load-test.py) for real IoT pipeline simulation
- Fix Loki 429 errors by increasing stream/ingestion limits
- Delete obsolete PERFORMANCE_TEST.md (referenced non-existent files)
- Delete unused rabbitmq.conf and enabled_plugins (plugins enabled via command)
- Fix docker-compose.monitoring.yml:
  - Remove dead MQTT env vars from k6 service
  - Fix celery-exporter: remove wrong depends_on, add restart policy
  - Add restart policy to mysqld-exporter for cross-file dependency
  - Move cAdvisor to linux profile (macOS incompatible)
- Add comprehensive PERFORMANCE_TEST_GUIDE.md with actual working procedures
- Fix OTEL_TRACES_SAMPLER value (parentbased_tracealways → parentbased_always_on)
- Fix k6 script paths in MONITORING.md (/scripts/tests/*.js → /scripts/load-test.js)
- Fix container names in PERFORMANCE_TEST_GUIDE.md (speedcam-ocr-worker → speedcam-ocr)
- Remove non-existent python Docker service reference
- Remove stale Make requirement from DEPLOYMENT.md
- Add uid to Jaeger datasource for Loki→Jaeger trace linking
- Fix promtail regex to match uppercase hex trace IDs
@lsh1215 lsh1215 merged commit a688308 into develop Feb 7, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant