Skip to content

Logpush Integration Plan

This content is not available in your language yet.

코드 생성 없이 기획 및 정책만 정의. 구현은 별도 단계에서 진행.
현재 적용: Policy B — production만 적용. 단일 버킷 logpush-r2, 단일 Job newsfork-seeds-workers, 시크릿 LOGPUSH_R2_ACCESS_KEY / LOGPUSH_R2_SECRET_KEY 2개만 사용. See LOGPUSH_UNIFY_PLAN.md.


validate → provision (D1, KV, Queues) → deploy [→ deploy-production]
  • provision: D1·KV 병렬 생성 → wrangler.jsonc 갱신 → Queues 생성 → artifact 업로드
  • deploy: artifact 다운로드 → wrangler deploy → wrangler tail (선택)
  • 환경: dev(기본), staging, production (wrangler env)
  • 구조화 로깅: src/lib/logger.ts — JSON 로그, Logpush 연동을 염두에 둔 설계
  • tech-stack: Cloudflare Logpush 명시
  • docs: DEBUGGING_IMPROVEMENTS.md에 Logpush 수동/자동 설정 개요 존재
  • Logpush Job 생성/관리 자동화
  • 환경별 Logpush 대상(R2 버킷/prefix) 정책
  • provision/verify 단계에 Logpush 포함
  • Logpush용 시크릿·권한 정책 문서화

2. Cloudflare Logpush 개요 (정책 수립용)

섹션 제목: “2. Cloudflare Logpush 개요 (정책 수립용)”
항목내용
API 범위Account 레벨: GET/POST /accounts/{account_id}/logpush/jobs
Workers 로그데이터셋 workers_trace_events (Workers Paid 플랜 필요)
대상R2, S3, GCS, HTTP 등. 본 프로젝트는 R2 전제
인증API Token에 Logs Write 권한 필요. R2 사용 시 R2 API Token(Access Key + Secret) 별도
r2://<BUCKET_PATH>/{DATE}?account-id=<ACCOUNT_ID>&access-key-id=<R2_ACCESS_KEY_ID>&secret-access-key=<R2_SECRET_ACCESS_KEY>
  • {DATE}: 일별 폴더 분리 권장 (예: 2026-01-29)
  • 버킷은 미리 생성되어 있어야 함
  • R2 API Token은 Logpush Job 생성 시 destination_conf에 포함 (시크릿 관리 정책 필요)
  • EventTimestampMs, Outcome, Exceptions, Logs, ScriptName, CPUTimeMs, WallTimeMs, EventType, ScriptVersion 등
  • output_options.field_names로 푸시 필드 선택 가능
  • 이미 logger.ts에서 내보내는 JSON 구조와 조합해 분석·보관 정책 설계 가능

  • provision 단계
    • 기존: D1, KV, Queues
    • 추가: Logpush용 R2 버킷 확인/생성, Logpush Job 생성/갱신
  • verify 단계
    • 기존: D1, KV, Queues 존재 여부
    • 추가: Logpush Job 존재 여부 및 enabled 여부

3.2 Job과 환경 매핑 (현재: production 단일)

섹션 제목: “3.2 Job과 환경 매핑 (현재: production 단일)”
환경Logpush 적용R2 버킷비고
devSkip
stagingSkip
production단일 Joblogpush-r2Provision/Verify는 production 배포 시에만 실행 (Policy B)
  • Job 이름: 단일 newsfork-seeds-workers (환경 접미사 없음).
  • 시크릿: LOGPUSH_R2_ACCESS_KEY, LOGPUSH_R2_SECRET_KEY 2개만 사용.
  1. provision
    • 기존 D1/KV/Queues 유지
    • (선택) Logpush용 R2 버킷 생성 또는 기존 버킷명 확인
    • Logpush API로 Job 생성 또는 업데이트
      • destination_conf에 환경별 버킷/prefix
      • dataset: workers_trace_events
      • output_options: 필드·timestamp 형식 등 (팀 정책에 따라 고정)
    • wrangler.jsonc는 리소스 ID만 갱신하는 현재 방식 유지
      • Logpush Job ID는 wrangler에 없으므로, 필요 시 별도 artifact(예: logpush-job-ids-${{ env }}.json)로 전달 가능
  2. verify
    • 기존 D1/KV/Queues 검증 유지
    • GET /accounts/{account_id}/logpush/jobs로 해당 환경용 Job 존재 및 enabled: true 확인
  3. deploy
    • 변경 없음. Worker 배포 후 로그는 기존처럼 Logpush가 R2로 푸시
  • Logpush Job 생성/수정 실패 시: provision 실패로 처리 (현재 D1/KV 실패와 동일)
  • verify에서 Logpush Job 없음/비활성: verify 실패로 처리
  • R2 버킷 부재: provision 단계에서 버킷 생성 또는 명시적 실패로 종료

4.1 환경별 활성화 (현재: Policy B)

섹션 제목: “4.1 환경별 활성화 (현재: Policy B)”
정책 항목devstagingproduction
Logpush Job 생성SkipSkip생성
R2 로그 버킷logpush-r2 (단일)
verify에서 Logpush 검사SkipSkip수행
  • production만: Provision/Verify는 DEPLOY_ENV=production 일 때만 실행.
  • Cloudflare API Token
    • 기존: CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID (GitHub Secrets)
    • 추가 권한: Logs Write (Logpush Job 생성/수정용)
  • R2 API Token (Logpush 전용)
    • wrangler.jsonc·소스코드에 넣지 않음
    • GitHub Secrets: 2개만 사용
      • LOGPUSH_R2_ACCESS_KEY (Access Key ID 값)
      • LOGPUSH_R2_SECRET_KEY (Secret Access Key 값)
    • R2 토큰 권한: 버킷 logpush-r2 에 대한 쓰기만 부여 (최소 권한)
  • R2 버킷: logpush-r2 (단일, Cloudflare에서 미리 생성)
  • Logpush Job 이름: newsfork-seeds-workers (단일, 환경 접미사 없음)
  • Logpush는 wrangler 리소스가 아님.
    • D1/KV/Queues처럼 wrangler.jsonc에 binding으로 들어가지 않음
  • 따라서:
    • wrangler.jsonc에는 Logpush 설정을 넣지 않음
    • Job ID·destination_conf는 provision 스크립트 + API로만 관리
    • 필요 시 “provision 결과”를 artifact로 남기고(예: Job ID), deploy에서는 사용하지 않아도 됨

  • .cursor/rules/infrastructure/cloudflare-logpush.mdc (신규)

    • Logpush는 Account 레벨, Workers dataset은 Paid 플랜 필요
    • R2 destination 형식, {DATE} 사용 권장
    • 시크릿: R2 자격증명은 저장소/wrangler에 넣지 않고 CI 시크릿으로만
    • 환경별 적용: staging/production 필수, dev 선택
    • 참조: provision/verify 스크립트, Cloudflare Logpush R2 문서
  • .cursor/rules/ci-cd/deployment.mdc

    • “Provision 단계에 Logpush Job 생성 포함” 명시
    • “Verify 단계에 Logpush Job 검증 포함” 명시
    • artifact는 기존대로 wrangler-config-${{ environment }} 유지; Logpush 전용 artifact는 선택
  • README 또는 OPERATIONS.md
    • Logpush 활성화 환경: staging, production
    • 필요한 GitHub Secrets: Cloudflare (Logs Write), Logpush용 R2 (Access Key ID / Secret)
    • 로그 보관 위치: R2 버킷명 및 path 규칙 ({DATE} 등)
  • docs/DEBUGGING_IMPROVEMENTS.md
    • “5. Cloudflare Logpush 통합”을 이 기획 문서(LOGPUSH_INTEGRATION_PLAN.md)로 링크하고, “자동화는 LOGPUSH_INTEGRATION_PLAN 기준으로 구현” 명시

6. 구현 시 참고할 스크립트/단계 (이름만 제안)

섹션 제목: “6. 구현 시 참고할 스크립트/단계 (이름만 제안)”
  • .github/scripts/steps/provision-logpush.sh
    • 환경 변수: DEPLOY_ENV, CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_API_TOKEN, LOGPUSH_R2_ACCESS_KEY, LOGPUSH_R2_SECRET_KEY
    • production일 때만 실행. R2 버킷 logpush-r2 존재 확인 → Logpush Job newsfork-seeds-workers 생성/업데이트
  • .github/scripts/lib/logpush-api.sh
    • Logpush API 호출 공통 함수 (list jobs, create job 등)
  • .github/scripts/steps/verify-resources.sh
    • 기존 검증 뒤 “Logpush Job 존재 및 enabled” 검사 추가 (production만)
  • provision-resources.sh
    • D1/KV/Queues 이후 provision-logpush.sh 호출 (환경이 production일 때만)

  • Cloudflare 계정이 Workers Paid 플랜인지 확인 (workers_trace_events 사용 가능 여부)
  • API Token에 Logs Write 권한 부여
  • R2 로그 전용 버킷(또는 prefix) 및 전용 R2 API Token 준비
  • GitHub Secrets에 R2 Access Key ID / Secret 등록 (환경별 또는 공통)
  • 환경별 적용 범위 확정: dev 제외, staging/production만 적용할지 여부
  • .cursor/rules에 Logpush 정책 규칙 추가
  • README/운영 문서에 Logpush 요구사항·시크릿 정리

구분내용
워크플로우provision에서 production일 때만 Logpush Job 생성/갱신, verify에서 production일 때만 Job 검증. deploy는 변경 없음.
환경production만 Logpush 적용. dev/staging은 Skip.
시크릿LOGPUSH_R2_ACCESS_KEY, LOGPUSH_R2_SECRET_KEY 2개만. Cloudflare Token에 Logs Write.
리소스R2 버킷 logpush-r2 (단일), Job 이름 newsfork-seeds-workers. wrangler.jsonc에는 Logpush 미포함.
규칙cloudflare-logpush.mdc, deployment.mdc에 Logpush 단계 명시.

이 문서는 기획·정책을 정의하며, 구현은 .github/scripts/.cursor/rules/ 에 반영되어 있다.


Terminal window
# Bash 문법 검사
bash -n .github/scripts/lib/logpush-api.sh
bash -n .github/scripts/steps/provision-logpush.sh
bash -n .github/scripts/steps/provision-resources.sh
bash -n .github/scripts/steps/verify-resources.sh
# dev / staging: Logpush 스킵 (exit 0)
DEPLOY_ENV=dev bash .github/scripts/steps/provision-logpush.sh
DEPLOY_ENV=staging bash .github/scripts/steps/provision-logpush.sh
# production + CLOUDFLARE_ACCOUNT_ID 없음 → exit 1 (Account ID 필요)
DEPLOY_ENV=production bash .github/scripts/steps/provision-logpush.sh
# production + Account ID 있음 + R2 시크릿 없음 → exit 1 (LOGPUSH_R2_ACCESS_KEY / LOGPUSH_R2_SECRET_KEY 필요)
CLOUDFLARE_ACCOUNT_ID=test DEPLOY_ENV=production bash .github/scripts/steps/provision-logpush.sh