Skip to content

English {#english}

Purpose: Create, list, and delete Logpush jobs that send edge logs (e.g. HTTP Requests) and Workers Trace Events to an R2 bucket. Prerequisites: R2 bucket (e.g. prego-logs, cloudflare-managed-f6a80c57 for Workers), Cloudflare API token with Logs Edit, R2 API token (Object Read & Write). Workers Trace Events require Workers Paid plan. Use env vars: CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_API_TOKEN, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY. Ref: cloudflare-logpush-observability-plan, cloudflare-logpush-email-workers-r2-plan.

flowchart LR
  A[Edge / Workers logs] --> B[Logpush job]
  B --> C[R2 bucket]

Full details: see Korean section below.


한국어 {#korean}

Runbook: Cloudflare Logpush 설정 (R2 목적지)

목적: 에지 로그(HTTP Requests 등) 및 Workers Trace Events(이메일 플로우 Worker 로그)를 R2 버킷으로 푸시하는 Logpush Job을 생성·조회·삭제하는 방법.
참조:


전제

  1. R2 버킷이 이미 존재한다.
    • 기존: prego-logs (Pulumi prego-pulumi에서 r2_logs_bucket_name export).
    • 이메일·Workers 로그: cloudflare-managed-f6a80c57 (Logpush 설정 화면에서 연결한 버킷).
  2. Cloudflare API 토큰: Account 권한 Logs Edit 필요.
  3. R2 API 토큰: Logpush가 R2에 쓰기 위해 필요. Cloudflare 대시보드 → R2 → Manage R2 API Tokens → Create API token, Object Read & Write on 대상 버킷. 생성 후 Access Key IDSecret Access Key를 안전하게 보관.
  4. Workers Trace Events 사용 시 Workers Paid 플랜 필요.

환경 변수

변수필수설명
CLOUDFLARE_ACCOUNT_ID32자리 16진수 Account ID.
CLOUDFLARE_API_TOKENLogs Edit 권한이 있는 API 토큰.
R2_ACCESS_KEY_IDcreate 시R2 API 토큰의 Access Key ID.
R2_SECRET_ACCESS_KEYcreate 시R2 API 토큰의 Secret Access Key.

1. Logpush Job 생성 (HTTP Requests → R2)

Prego 레포 루트에서:

Terminal window
export CLOUDFLARE_ACCOUNT_ID="your_account_id"
export CLOUDFLARE_API_TOKEN="your_api_token"
export R2_ACCESS_KEY_ID="your_r2_access_key_id"
export R2_SECRET_ACCESS_KEY="your_r2_secret_access_key"
npx tsx infra/logpush_setup.ts create --dataset http_requests --bucket prego-logs --path-prefix edge
  • 결과: Created Logpush job: <id> 출력. R2 버킷 prego-logs 아래 edge/YYYY-MM-DD/ 형태로 로그 파일이 쌓인다.
  • 다른 데이터셋: --dataset workers_trace_events 또는 --dataset firewall_events (기획서 §2.1 참고).

1b. 이메일·Workers 로그 (cloudflare-managed-f6a80c57)

기획서 cloudflare-logpush-email-workers-r2-plan.md 기준. 동일 버킷에 Workers Trace Events + HTTP Requests 둘 다 생성하려면:

Terminal window
export CLOUDFLARE_ACCOUNT_ID="your_account_id"
export CLOUDFLARE_API_TOKEN="your_api_token"
export R2_ACCESS_KEY_ID="your_r2_access_key_id"
export R2_SECRET_ACCESS_KEY="your_r2_secret_access_key"
npx tsx infra/logpush_setup.ts create-all-email-workers
  • 결과: Workers Trace Events Job ID, HTTP Requests Job ID 출력. R2 경로: cloudflare-managed-f6a80c57/workers_trace_events/YYYY-MM-DD/, cloudflare-managed-f6a80c57/http_requests/YYYY-MM-DD/.
  • Workers Trace Events만 생성:
Terminal window
npx tsx infra/logpush_setup.ts create --dataset workers_trace_events --bucket cloudflare-managed-f6a80c57
  • --path-prefix 생략 시 데이터셋별 기본값 사용(workers_trace_events → workers_trace_events, http_requests → http_requests).
  • 특정 Worker만 수집 시: --script-name prego-auth-worker (또는 pregoi-email-queue-gateway, pregoi-mail-sender).

2. Job 목록 조회

Terminal window
export CLOUDFLARE_ACCOUNT_ID="your_account_id"
export CLOUDFLARE_API_TOKEN="your_api_token"
npx tsx infra/logpush_setup.ts list
  • 출력된 id를 삭제 시 사용.

3. Job 삭제

Terminal window
npx tsx infra/logpush_setup.ts delete --job-id <id>

4. R2 버킷 확인

  • Cloudflare 대시보드 → R2 → 대상 버킷(prego-logs 또는 cloudflare-managed-f6a80c57) → Objects.
  • Job 생성 후 수 분 내에 해당 prefix(edge/, workers_trace_events/, http_requests/) 아래 YYYY-MM-DD/ 로 파일이 생성되는지 확인.

5. Lifecycle(보존 기간) 설정 (선택)

기획서 cloudflare-logpush-observability-plan.md §5.3, cloudflare-logpush-email-workers-r2-plan.md §6: 90일 경과 로그 자동 삭제.

대시보드

  1. Cloudflare 대시보드 → R2 → 대상 버킷(cloudflare-managed-f6a80c57 또는 prego-logs) 선택.
  2. SettingsObject LifecycleAdd rule.
  3. Rule name: 예 logpush-expire-90d. Prefix: workers_trace_events/ 또는 http_requests/ (또는 edge/). Expire after (days): 90. 저장.
  4. 동일하게 다른 prefix에 대해 규칙 추가.

Wrangler (선택)

Lifecycle 규칙 JSON 예시: infra/logpush_r2_lifecycle_example.json (prefix별 90일 만료).
Prego 레포 루트에서:

Terminal window
npx wrangler r2 bucket lifecycle set cloudflare-managed-f6a80c57 --file infra/logpush_r2_lifecycle_example.json

다른 버킷이면 <BUCKET_NAME> 교체. 문서: Object lifecycles.
(JSON 형식이 API와 다르면 Wrangler 문서의 r2 bucket lifecycle set 요청 본문 형식에 맞게 수정.)

Cloudflare API

Put Object Lifecycle Rules 에서 계정·버킷 지정 후 규칙 JSON 전송.


6. 문제 해결

현상확인
Logpush create failed: ...API 토큰에 Logs Edit 권한 있는지, Account ID가 올바른지 확인.
Job은 생성됐으나 R2에 파일 없음R2 API 토큰이 prego-logs 버킷에 쓰기 권한이 있는지, destination_conf의 bucket 이름이 prego-logs와 일치하는지 확인.
403 / 9109R2 권한 또는 버킷 미존재. Pulumi에서 pulumi stack output r2_logs_bucket_name 으로 버킷명 확인.
Help