Skip to content

Cloudflare 기반 모니터링 설계 (Serverless Observability)

목적: Hetzner에 Prometheus/Grafana를 두지 않고, Cloudflare Stack(Workers, D1, KV, Logpush, Analytics Engine) 으로 서비스 관측성을 구축하는 설계.
참조: api-control-plane-implementation-plan.md §16–§17, cloudflare-logpush-observability-plan.md.


1. 기존 기술 → Cloudflare 대체 매핑

기존 기술Cloudflare 대체 기술역할 및 장점
Prometheus DBCloudflare D1 / Analytics Engine시계열·집계 데이터 저장 및 SQL 기반 쿼리. Scrape 대기 없이 이벤트 발생 시 즉시 기록.
Grafana DashboardCloudflare 대시보드 / Workers 기반 커스텀 UI기본 대시보드 또는 D1·Analytics Engine 쿼리로 Chart.js 등 활용한 SaaS 내장 대시보드.
AlertmanagerWorkers + Cloudflare Notifications임계치 도달 시 이메일, Webhook, PagerDuty 알림.
Log StorageCloudflare R2 + Logpush장기 로그 보관·분석. 별도 로깅 서버 없이 에지 로그를 R2로 직접 전송.

2. 아키텍처 개요 (Serverless Observability)

모든 지표를 Cloudflare 데이터 파이프라인에 태워 보내는 방식. Hetzner에서 메트릭을 Scrape하는 구조가 아님.

2.1 메트릭 수집: Cloudflare Workers Analytics Engine

항목내용
방식Zuplo 또는 Control Plane Worker 내부에서 요청·이벤트 발생 시 env.ANALYTICS_ENGINE.writeDataPoint() 호출.
이점초당 수만 건 고성능 시계열 기록. Prometheus처럼 Scrape 주기를 기다릴 필요 없음.
지표 예테넌트별 API 요청 수, 4xx/5xx, 지연 시간, provisioning 성공/실패, queue depth.

2.2 로그 수집: Cloudflare Logpush & R2

항목내용
방식Zuplo API 로그·Workers 로그를 LogpushR2 버킷에 전송.
이점별도 로깅 서버 없이 테넌트 활동 로그 영구 보존. logpush-setup.md와 연계.

2.3 데이터 시각화: Workers + D1 (커스텀 대시보드)

항목내용
방식D1에 저장된 테넌트·job 상태와 Analytics Engine 데이터를 쿼리해, 관리자 페이지 또는 전용 Worker에서 Chart.js 등으로 차트 렌더링.
이점Grafana 별도 운영 없이 SaaS 제품 내부 대시보드에 자연스럽게 통합. 테넌트별 사용량·과금 연동(SQL Join) 용이.

2.4 알림: Workers + Cloudflare Notifications

항목내용
방식Cron Worker 또는 이벤트 핸들러에서 D1·Analytics Engine 집계 결과를 주기적으로 검사. 임계치 초과 시 Webhook·이메일·PagerDuty 등 호출.
이점Alertmanager 인프라 없이 Serverless 알림 파이프라인 구축.

3. 장단점 및 Hybrid 권장

3.1 장점

  • Zero Infrastructure: Hetzner에 Prometheus/Grafana OS·디스크·메모리 관리 불필요.
  • 테넌트별 과금 연동: D1에서 테넌트 정보와 사용량을 SQL로 Join하기 쉬워 사용량 기반 과금 구현에 유리.
  • Global Scalability: 전 세계 어디서 접속해도 Cloudflare Edge에서 처리되어 응답이 빠름.

3.2 트레이드오프

  • 세밀한 서버 메트릭: CPU 온도, 디스크 I/O 등 Hetzner 서버 내부 하드웨어 지표는 Cloudflare만으로는 수집 한계. 별도 에이전트(Worker 배포 또는 경량 스크립트) 필요.
  • 쿼리 언어: PromQL 대신 SQL(D1)·Cloudflare Analytics API 사용. 기존 Grafana/PromQL 지식과는 다른 학습 필요.

3.3 Hybrid Observability (권장)

영역권장 방식
애플리케이션/비즈니스 지표Cloudflare Analytics Engine + D1. 테넌트별 API 사용량, 에러율, 프로비저닝 성공률 등.
인프라/하드웨어 지표Hetzner 서버 상태는 Cloudflare Tunnel 경유 주기적 헬스체크 또는 초소형 스크립트가 D1에 상태 업데이트. 필요 시 기존 Node Exporter + 단일 Prometheus 인스턴스는 최소 구성으로만 유지 가능.

4. 구현 단계 제안

  1. Analytics Engine 연동: Workers/Zuplo에서 writeDataPoint()로 테넌트별 API 사용량·에러 추적.
    구현: cloudflare-analytics-engine-implementation.md. Control Plane Worker에 ANALYTICS_ENGINE 바인딩·src/analytics.ts·라우트별 호출 적용됨.
  2. D1 기반 커스텀 대시보드: D1 + Analytics Engine 쿼리로 SaaS 전용 대시보드 UI (Chart.js 등).
    구현: cloudflare-dashboard-implementation.md. Control Plane GET /internal/metrics/summary (D1 집계 JSON) 제공. UI는 정적 페이지·Chart.js 또는 관리자 앱에서 해당 API 소비.
  3. Hetzner 보완(Hybrid): CPU/메모리/디스크를 D1에 쏘아주는 경량 스크립트.
    구현: Control Plane POST /internal/server-metrics (Bearer INTERNAL_API_KEY), D1 server_metrics 테이블(migration 0007). 노드에서 cron + curl 또는 server-metrics-collection.md 스크립트로 푸시. 대시보드 GET /internal/metrics/summary·/internal/dashboard에 Node health(server_metrics) 테이블 포함.

5. 관련 문서

Help