Logpush 로 로그를 오래 보관하기R2·S3 비용 구조
한눈에 보기
대시보드 보안 분석 화면은 최근 31일 안팎만 보여 줍니다. 더 오래 남기려면 Logpush? 로 미리 보내 둡니다. 지난 로그는 나중에 채워 넣지 못합니다.
분석 화면은 며칠까지 보여 주나요?
최근 31일 안팎입니다. Enterprise 의 Security Analytics? 만 90일이고, Security Events? 는 모든 플랜이 31일입니다.
화면별 보관 기간
도메인 › Analytics (보안 이벤트는 Events 탭)
| 화면 | Free·Pro·Business | Enterprise |
|---|---|---|
| Security Analytics (모든 요청) | 31일 | 90일 |
| Security Events (막거나 표시한 요청) | 31일 | 31일 |
한 번에 고르는 조회 기간은 30~31일이고, 2026-10-02 부터 모든 플랜이 최소 30일치를 봅니다.
- 분석 화면은 표본?으로 그립니다. 요청 하나하나가 필요하면 Logpush 나 Log Explorer? 를 씁니다.
Logpush 는 무엇을 하나요?
고른 데이터셋?을 내 저장소나 분석 도구로 계속 보냅니다. 2026-09-30 부터 모든 플랜(Free 포함)이 씁니다.
Logpush 가 보내는 것
로그를 묶음(batch) 파일로 만들어 목적지에 올립니다.
| 데이터셋 | 담기는 것 |
|---|---|
HTTP requests (http_requests) | 요청마다 한 줄, 보안 처리 결과 포함 |
Firewall events (firewall_events) | 보안 기능이 막거나 표시한 이벤트 |
DNS logs (dns_logs) | DNS 질의 기록 |
Audit logs v2 (audit_logs_v2) | 누가 언제 무엇을 바꿨나 (계정 단위) |
- 쓸 수 있는 데이터셋은 켜진 제품마다 다르고, Firewall events 는 계정 단위 작업 하나로 모든 존을 받을 수도 있습니다.
- 2026-09-30 부터 사용량 과금입니다. 계정마다 매달 포함 사용량이 있고 넘는 만큼 GB 단위로 붙습니다.
이 페이지에는 금액을 적지 않습니다. 요금표로, 기존 Enterprise 계약은 갱신 전까지 계약서로 확인합니다.
목적지는 어떻게 고르나요?
나중에 로그를 열어 볼 곳으로 고릅니다. R2?·S3 같은 저장소와 SIEM? 같은 분석 도구 중 분석할 곳과 같은 쪽이면 옮기는 일이 줄어듭니다.
목적지 고르는 법
| 나중에 분석할 곳 | 고를 목적지 |
|---|---|
| 아직 모름, 우선 오래 쌓기 | R2 |
| AWS | Amazon S3 |
| Google Cloud | Google Cloud Storage, BigQuery |
| Microsoft Azure | Azure 저장소 |
| 보안 관제·모니터링 도구 | Splunk, Datadog, Sumo Logic 같은 전용 목적지, HTTP 엔드포인트 |
- 작업 하나는 목적지 하나로 보내니, 두 곳이면 작업을 둘 만듭니다.
존마다 Logpush 작업은 최대 4개라, 목적지를 늘리기 전에 남은 개수부터 봅니다.
R2 와 S3 는 비용이 어떻게 다른가요?
꺼낼 때가 다릅니다. R2 는 인터넷으로 꺼내는 전송(egress?)에 요금이 없고, S3 같은 일반 클라우드 저장소는 전송 요금이 붙을 수 있습니다.
비용은 세 군데서 생깁니다
- 보내기(Logpush): R2 와 Pipelines 는 «내부 목적지», 그 밖은 «외부 목적지» 요율로 실제 전달한 양을 압축 전 크기로 잽니다.
- 쌓아 두기(저장소): Logpush 와 따로 과금되며, R2 도 저장 용량과 요청 수에 요금이 있습니다.
- 꺼내기(egress): R2 는 Workers, S3 API, r2.dev 로 꺼내도 전송 요금이 없고, S3 같은 곳은 그 클라우드 요금표를 봅니다.
R2 에 다른 유료 서비스를 연결하면 그 요금은 따로 붙습니다.
오래된 로그는 R2 수명 주기 규칙(lifecycle)으로 지우거나 Infrequent Access 등급으로 옮깁니다(읽을 때 처리 요금 별도).
함정: 가장 흔한 실수: 필요해진 뒤에야 켜기
일이 터진 뒤에 켜면 그 전 로그는 받을 수 없습니다. Logpush 는 지난 로그를 채워 넣지 못합니다.
사고를 알아차렸을 때는 분석 화면 보관 기간이 이미 지났을 수 있습니다.
- Logpush 는 지난 로그를 채워 넣지(backfill) 못합니다. 작업이 꺼져 있던 동안의 로그도 같습니다.
- 목적지가 24시간 동안 한 건도 받지 못하면 Cloudflare 가 작업을 끄니, 상태 화면과 알림을 함께 걸어 둡니다.
보관이 필요한 존은 지금 켜고, 저장 비용은 수명 주기 규칙으로 조절합니다.
한눈에 보기
작업 하나에는 데이터셋? 하나, 목적지 하나, 필드 목록이 들어갑니다. 필드는 «나중에 무엇을 물어볼지»에서 거꾸로 고릅니다.
대시보드에서는 어떤 순서로 만드나요?
목적지부터 고릅니다. 목적지, 소유권 확인, 데이터셋, 필드와 필터 순서로 정하고, 만든 뒤 상태를 확인합니다.
작업 만들기 다섯 단계
도메인 › Analytics & Logs › Logpush › Create a Logpush job (계정 단위는 계정의 Logpush)
- 목적지를 고르고 목적지 정보를 넣습니다.

- S3, Google Cloud Storage, Azure 는 소유권 확인?으로 목적지에 생긴 확인 파일의 토큰을 넣습니다.
- 보낼 데이터셋을 고릅니다.
- 필드와 필터를 고릅니다(다음 절).
- 저장한 뒤 Health 탭과 알림으로 상태를 확인합니다.
필드는 어떻게 고르나요?
나중에 물어볼 질문에서 거꾸로 고릅니다. 질문마다 필드 두세 개면 충분합니다.
질문별 필드 (HTTP requests 데이터셋)
| 나중에 물어볼 질문 | 필드 |
|---|---|
| 이 요청 찾기 (대시보드와 대조) | RayID, EdgeStartTimestamp |
| 누가 어디로 보냈나 | ClientIP, ClientCountry, ClientASN, ClientRequestHost, ClientRequestPath |
| 무엇이 막았나 | SecurityAction, SecurityRuleID, SecuritySources |
| 응답은 어땠나 | EdgeResponseStatus, OriginResponseStatus |
| 봇인가 (JA4? 는 Bot Management 계약 시) | BotScore, BotDetectionIDs, JA4 |
| 공격 점수, 유출 자격증명 | WAFAttackScore, LeakedCredentialCheckResult |
- Ray ID? 는 꼭 넣습니다. 대시보드 이벤트와 로그 한 줄을 잇는 열쇠입니다.
SecurityAction,SecurityRuleID는 요청을 끝낸(차단, 챌린지) 룰 하나만 담으니, 기록(Log)만 한 룰까지 보려면 배열 필드SecurityActions,SecurityRuleIDs도 고릅니다.- 헤더는 Custom fields 를 설정해야
RequestHeaders,ResponseHeaders에 담깁니다. - 필드는 나중에 더해도 되고, 반영까지 10~15분쯤 걸립니다.
보내는 양은 어떻게 줄이나요?
보내기 전에 덜어 내는 방법이 네 가지 있습니다. 과금은 전달된 양으로 세니 덜어 낸 만큼 비용도 줄어듭니다.
보내기 전에 덜어 내기
| 방법 | 하는 일 | 알아 둘 것 |
|---|---|---|
| 필터 | 조건에 맞는 로그만 통과 (아래 함정) | 연산자 약 30개, 1000바이트까지 |
| 표본? | sample_rate 0.1 이면 약 10% 만 보냄 | 기본값 1 은 전부 |
| DDoS 공격 트래픽 빼기 | 고급 옵션 «Exclude DDoS attack traffic» | HTTP requests, Firewall events, Network Analytics 데이터셋 |
| Transformers? | SQL 로 거르고, 모양을 바꾸고, 민감한 값을 가림 | NDJSON? 작업에만, 필터와 함께 못 씀, 처리량 별도 과금 |
보안 조사용 작업에는 표본을 쓰지 않습니다. 찾는 바로 그 요청이 빠질 수 있습니다.
Firewall events 데이터셋은 Action, RuleID, Source 필드로 필터를 걸지 못합니다.
R2 로는 어떻게 보내나요?
Automatic 이 가장 빠릅니다. Cloudflare 가 버킷까지 만들고, 경로와 키를 직접 정하려면 Custom 을 씁니다.
R2 목적지 만들기
… › Create a Logpush job › R2 Object Storage (Automatic 또는 Custom)
- Automatic: 데이터셋과 저장 지역만 고르면 끝나 시험이나 빠른 시작에 맞습니다.
- Custom: R2 버킷과 R2 API 토큰을 먼저 만들고 버킷 이름, 경로, 액세스 키를 넣습니다. «Organize logs into daily subfolders» 를 켜면 날짜별 폴더로 쌓입니다.
- 경로 예:
cloudflare-logs/http_requests/example.com - 고급 옵션에서 시간 형식과 표본 비율을 정합니다.
작업이 살아 있는지 어떻게 보나요?
Logpush 의 Health 탭에서 매일 봅니다. 전송 성공률, 재시도, 버려진 로그가 보입니다.
작업 상태(Logpush Health) 보는 법
… › Logpush › Health 탭 (Jobs 탭 Job Health (24h) 열의 View Health)
| 화면 | 보는 것 |
|---|---|
| Upload Health | 얼마나 올라갔나, 어디서 버려졌나 (완전성, 성공률, 양) |
| Upload Reliability | 재시도 횟수, 업로드 시간, 목적지 연결 가능률 |
- 상태 지표는 30일치까지 보이고, GraphQL
logpushHealthAdaptiveGroups로도 조회합니다. - 목적지가 잠깐 안 받으면 쌓아 두고 다시 보내되, 보관 시간을 넘긴 묶음은 버립니다(오류 1201 FlushMaxLag).
- 작업이 꺼질 때 메일을 받으려면 «Failing Logpush Job Disabled» 알림을 겁니다(문서상 Enterprise 플랜 포함).
함정: 필터는 «포함 조건»입니다
필터를 «이 조건이면 빼라»로 읽으면 반대로 걸립니다. Logpush 필터는 남길 조건입니다.
필터는 AND 로 묶은 조건이 전부 참인 로그만 내보내는 통과 문(pass-through gate)이라, «빼라»는 뜻으로 eq 를 적으면 그 값만 남습니다.
- 빼고 싶은 값은
!eq,!in같은 부정 연산자로 «남길 조건»을 씁니다. 아래는 국가 코드ca만 빼는 예입니다.
{"where": {"key": "ClientCountry", "operator": "!eq", "value": "ca"}}- 바꾼 설정은 곧바로 반영되지 않으니, 잠시 뒤 목적지에 쌓인 파일로 확인합니다.
한눈에 보기
API 로는 소유권 확인, 작업 생성, 상태 감시 순서로 갑니다. 고칠 때 output_options 는 통째로 바뀌어, 빠뜨린 항목이 기본값으로 돌아가면 받는 쪽 파서가 소리 없이 깨집니다.
API 로는 어떤 순서로 만드나요?
소유권 확인?부터 합니다. API 토큰에는 Logs Write 권한(대시보드 표기 Logs Edit)이 필요합니다.
API 순서
- 소유권 확인을 요청하면 목적지에 확인 파일이 생기고 응답에 그 이름이 옵니다.
POST /client/v4/zones/{zone_id}/logpush/ownership
{"destination_conf": "s3://<버킷>/logs?region=<리전>"}- 파일 안의 토큰을
ownership_challenge에 넣어 작업을 만듭니다.
POST /client/v4/zones/{zone_id}/logpush/jobs
{"dataset": "http_requests", "enabled": true,
"destination_conf": "s3://<버킷>/logs?region=<리전>",
"ownership_challenge": "<토큰>",
"output_options": {…}}- 계정 단위 데이터셋은
/accounts/{account_id}/logpush/jobs로 만듭니다. 데이터셋은 만든 뒤 바꿀 수 없습니다. destination_conf를 바꿀 때도 소유권 확인 토큰을 새로 받습니다.- R2 는
r2://<버킷 경로>/{DATE}?account-id=…&access-key-id=…&secret-access-key=…처럼 액세스 키를 목적지 문자열에 넣고, Splunk 는 소유권 확인이 없습니다. - Zero Trust 데이터셋(Access, Gateway, DEX)에는
Zero Trust: PII Read권한이 더 필요합니다.
목적지 문자열에 비밀 키가 들어가니 문서나 코드 저장소에 그대로 두지 않습니다.
작업을 고칠 때 무엇을 조심하나요?
output_options 가 통째로 바뀝니다. PUT 에서 빠뜨린 항목은 아래 표의 기본값으로 돌아갑니다.
output_options 핵심 항목
| 항목 | 뜻 | 기본값 |
|---|---|---|
field_names | 보낼 필드 목록 («전부» 값은 없음) | 직접 나열 |
output_type | ndjson 또는 csv | ndjson |
timestamp_format | unixnano, unix, rfc3339, rfc3339ms, rfc3339ns | 대시보드 rfc3339, API unixnano |
sample_rate | 보낼 비율 (0 초과 1 이하) | 1 |
CVE-2021-44228 | 파일 안의 ${ 를 x{ 로 바꿔 가림 | false |
- 목적지를 바꾸면 10~15분 동안은 옛 목적지로도 갈 수 있습니다.
- 묶음 크기는
max_upload_bytes,max_upload_records,max_upload_interval_seconds로 정합니다(전달 속도가 아니라 파일 크기).
전송이 끊기면 어떻게 하나요?
Health 탭과 작업 정보부터 봅니다. 24시간 동안 하나도 못 보내면 Cloudflare 가 작업을 끄고, 버려진 로그는 되살리지 못합니다.
끊겼을 때 보는 순서
- Health 탭에서 재시도, 실패, 목적지 연결 가능률(Destination Availability)을 봅니다.
- 작업 정보의
last_complete(마지막 성공 시각),last_error,error_message를 확인합니다. - 목적지 자격 증명(키, 토큰)이 만료되거나 바뀌었는지, 목적지가 Cloudflare IP 를 막는지 살핍니다.
- 고친 뒤 대시보드에서 작업을 다시 켭니다(꺼져 있던 동안의 로그는 채워지지 않음).
재시도 간격과 동시 업로드 수는 Cloudflare 가 정하며 바꿀 수 없습니다.
처음 켠 작업은 몇 분 안에 첫 로그가 오고, 요청이 아주 많은 존은 몇 시간 걸리기도 합니다.
밖으로 보내지 않고 보관할 수도 있나요?
있습니다. Log Explorer? 는 로그를 Cloudflare 안에 저장해 대시보드와 SQL 로 찾는 유료 기능입니다.
Logpush 와 Log Explorer 고르기
| 구분 | Logpush | Log Explorer |
|---|---|---|
| 저장 위치 | 내 저장소, 분석 도구 | Cloudflare 안의 R2 (내 R2 화면에는 안 보임) |
| 보관 기간 | 목적지에서 내가 정함 | 기본 30일, 계약 시 최대 2년 (추가 비용) |
| 찾는 법 | 내 도구로 | Observability › Logs (2026-10-07 부터), SQL |
| 가용 | 모든 플랜 (사용량 과금) | 유료 추가 기능 |
- 빠른 조사는 Log Explorer, 장기 보관과 외부 도구 연동은 Logpush 로 나눠 쓰기도 합니다.
- Security Analytics 에서 건 필터는 그대로 Log Explorer 조회로 넘어갑니다.
함정: output_options 를 일부만 고치기
작업을 고치며 field_names 만 보내면 시간 형식이 기본값으로 돌아갑니다. 받는 쪽 파서가 소리 없이 깨집니다.
rfc3339 로 쓰던 작업에 PUT /zones/{zone_id}/logpush/jobs/{job_id} 로 field_names 만 보내면 시간 형식이 API 기본값 unixnano 로 돌아갑니다.
- 고치기 전 GET 으로 지금 값을 받아 두고, 바꿀 항목만 고친 전체 객체를 보냅니다.
- 바꾼 뒤 목적지에 새로 쌓인 파일의 시간 값 모양을 확인합니다.
이 문서의 용어
- 데이터셋
- Dataset(로그 종류) · HTTP 요청, 보안 이벤트, DNS 질의처럼 Logpush 가 보내는 로그 묶음의 이름. 존 단위와 계정 단위가 있습니다.
- 소유권 확인
- Ownership challenge(소유권 확인) · Logpush 가 목적지에 확인 파일을 쓰고, 그 안의 토큰을 받아 «이 저장소가 내 것»임을 증명하는 절차.
- 표본
- Sampling(표본 추출) · 전체 중 일부만 골라 보이거나 보내는 것. 조사용 로그에서는 찾는 요청이 빠질 수 있습니다.
- egress
- Egress(데이터 반출) · 저장소의 데이터를 밖으로 꺼내 보내는 전송. 클라우드에 따라 이 전송에 요금이 붙습니다.
- JA4
- JA4 fingerprint(TLS 지문) · TLS 접속 방식으로 클라이언트 종류를 알아보는 값. Logpush 로는 Bot Management 고객만 받습니다.
- Log Explorer
- Log Explorer(Cloudflare 안 로그 검색) · 로그를 밖으로 보내지 않고 Cloudflare 안에 저장해 대시보드·SQL 로 찾는 유료 기능.
- Logpush
- Logpush(로그 내보내기) · Cloudflare 가 남긴 요청·보안 기록을 내가 정한 저장소나 분석 도구로 묶음 파일로 계속 보내는 기능입니다.
- NDJSON
- Newline Delimited JSON(줄 단위 JSON) · 한 줄에 기록 하나를 JSON 으로 적는 형식. Logpush 의 기본 출력입니다.
- R2
- Cloudflare R2(Cloudflare 객체 저장소) · 파일을 쌓아 두는 Cloudflare 저장소. 인터넷으로 꺼낼 때 전송 요금(egress)을 받지 않습니다.
- Ray ID
- Ray ID(요청 고유 번호) · Cloudflare 가 요청마다 붙이는 번호. 대시보드 이벤트와 로그 한 줄을 이어 주는 열쇠입니다.
- Security Analytics
- Security Analytics(보안 분석) · 도메인에 들어온 모든 요청을 보안 관점으로 보여 주는 화면. 표본(sampling)으로 그립니다.
- Security Events
- Security Events(보안 이벤트) · Cloudflare 보안 기능이 막거나 표시한 요청만 모아 보여 주는 화면.
- SIEM
- Security Information and Event Management(보안 정보·이벤트 관리) · 여러 곳의 보안 로그를 한데 모아 검색하고 경보를 거는 도구.
- Transformers
- Logpush Transformers(보내기 전 SQL 가공) · 로그를 보내기 직전에 SQL 로 거르고, 바꾸고, 민감한 값을 가리는 기능.