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을 생성·조회·삭제하는 방법.
참조:
- cloudflare-logpush-observability-plan
- cloudflare-logpush-email-workers-r2-plan — 이메일·Workers 로그용 R2(
cloudflare-managed-f6a80c57).
전제
- R2 버킷이 이미 존재한다.
- 기존: prego-logs (Pulumi
prego-pulumi에서r2_logs_bucket_nameexport). - 이메일·Workers 로그: cloudflare-managed-f6a80c57 (Logpush 설정 화면에서 연결한 버킷).
- 기존: prego-logs (Pulumi
- Cloudflare API 토큰: Account 권한 Logs Edit 필요.
- R2 API 토큰: Logpush가 R2에 쓰기 위해 필요. Cloudflare 대시보드 → R2 → Manage R2 API Tokens → Create API token, Object Read & Write on 대상 버킷. 생성 후 Access Key ID와 Secret Access Key를 안전하게 보관.
- Workers Trace Events 사용 시 Workers Paid 플랜 필요.
환경 변수
| 변수 | 필수 | 설명 |
|---|---|---|
CLOUDFLARE_ACCOUNT_ID | 예 | 32자리 16진수 Account ID. |
CLOUDFLARE_API_TOKEN | 예 | Logs Edit 권한이 있는 API 토큰. |
R2_ACCESS_KEY_ID | create 시 | R2 API 토큰의 Access Key ID. |
R2_SECRET_ACCESS_KEY | create 시 | R2 API 토큰의 Secret Access Key. |
1. Logpush Job 생성 (HTTP Requests → R2)
Prego 레포 루트에서:
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 둘 다 생성하려면:
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만 생성:
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 목록 조회
export CLOUDFLARE_ACCOUNT_ID="your_account_id"export CLOUDFLARE_API_TOKEN="your_api_token"
npx tsx infra/logpush_setup.ts list- 출력된
id를 삭제 시 사용.
3. Job 삭제
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일 경과 로그 자동 삭제.
대시보드
- Cloudflare 대시보드 → R2 → 대상 버킷(cloudflare-managed-f6a80c57 또는 prego-logs) 선택.
- Settings → Object Lifecycle → Add rule.
- Rule name: 예
logpush-expire-90d. Prefix:workers_trace_events/또는http_requests/(또는edge/). Expire after (days):90. 저장. - 동일하게 다른 prefix에 대해 규칙 추가.
Wrangler (선택)
Lifecycle 규칙 JSON 예시: infra/logpush_r2_lifecycle_example.json (prefix별 90일 만료).
Prego 레포 루트에서:
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 / 9109 | R2 권한 또는 버킷 미존재. Pulumi에서 pulumi stack output r2_logs_bucket_name 으로 버킷명 확인. |