Cloudflare Logpush
Cloudflare Logpush는 HTTP 요청 로그를 Ahrefs로 자동 전송합니다. 트래픽이 많은 사이트에 권장되는 방법이지만, Cloudflare 엔터프라이즈 플랜이 필요합니다.
사전 준비 사항
- 모니터링하려는 Zone에 Cloudflare 엔터프라이즈 플랜이 있어야 합니다.
- 다음 권한이 있는 Cloudflare API 토큰:
- 영역 → 영역 → 읽기
- Zone → Logs → Edit
- 영역 → DNS → 읽기 (선택 사항, Ahrefs가 DNS 레코드가 프록시 처리되어 있는지 확인할 수 있게 함)
- 수동 설정의 경우에만: 설치 명령에서 Cloudflare 구성을 읽고 업데이트하는 데 사용하는
jq가 로컬에 설치되어 있어야 합니다.
info
Logpush는 Cloudflare를 거치는 요청만 기록합니다. DNS 전용 (회색 구름)으로 설정된 DNS 레코드는 방문자를 원본 서버로 바로 보내므로, 봇 애널리틱스는 해당 레코드에 대한 데이터를 받지 못합니다. 도메인의 DNS 레코드가 프록시됨 (주황색 구름)으로 설정되어 있는지 확인하세요. 프록시 상태를 참고하세요.
제한 및 비용
Logpush 작업은 도메인과 그 하위 도메인으로 들어오는 모든 요청에 대해 요청당 하나의 로그 라인을 전송합니다. 브라우저에서 발생한 요청도 전송되지만, Ahrefs는 봇이 아닌 모든 항목을 폐기합니다.
warning
Cloudflare는 존(zone)당 최대 4개의 Logpush 작업만 허용합니다. 이미 4개가 있다면, 하나를 삭제할 때까지 설정이 실패합니다.
Cloudflare는 전송된 비압축 바이트를 기준으로 Logpush 사용량을 측정합니다. 청구 방식은 엔터프라이즈 계약서에서 확인하고, 자세한 내용은 Logpush를 참고하세요.
Cloudflare API 토큰 가져오기
올바른 계정으로 Cloudflare 대시보드에 로그인되어 있는지 확인하세요. 그런 다음 https://dash.cloudflare.com/profile/api-tokens 페이지로 이동해 오른쪽 상단의 토큰 만들기 버튼을 찾아 클릭하세요:
이제 사용자 지정 토큰 생성 흐름을 진행하세요:
다음 정보를 입력하세요:
- API 토큰 이름: ahrefs-bot-analytics
- 다음 권한을 부여하세요:
- Ahrefs 봇 애널리틱스로 로그를 푸시하는 Logpush 작업을 구성하려면 Zone / Logs / Edit로 이동합니다.
- 구성할 영역을 찾을 수 있도록 Zone / Zone / Read
- DNS 레코드가 Cloudflare를 통해 프록시되는지 확인할 수 있도록 Zone / DNS / Read(선택 사항) 권한을 부여해 주세요.
- Zone Resources는 Include / All Zones로 설정할 수 있으며, 또는 웹사이트 도메인에 해당하는 영역을 선택할 수도 있습니다.
이제 Continue to summary 버튼을 클릭하세요. 요약은 다음과 같이 표시됩니다:
이제 Create Token 버튼을 클릭하고, 생성된 토큰을 다음 단계에서 사용할 수 있도록 클립보드에 복사하세요.
추가 정보는 Cloudflare 문서의 API 토큰 생성 방법을 참고하세요.
자동 설정
- Ahrefs에서 프로젝트 설정 → 봇 애널리틱스로 이동합니다.
- 방법으로 Cloudflare Logpush를 선택합니다.
- Cloudflare API 토큰을 붙여넣고 Connect를 클릭합니다.
Ahrefs는 토큰을 사용하여 다음 작업을 수행합니다:
- 프로젝트의 도메인과 일치하는 Zone을 찾습니다.
- DNS 레코드가 Cloudflare를 통해 프록시되는지 확인하고, 그렇지 않은 경우 경고합니다(선택 사항인 Zone → DNS → Read 권한 필요).
- 기존 Logpush 작업 확인.
- Ahrefs로 로그를 보내는 새 작업을 만듭니다.
- 봇 확인 요청 헤더(
signature,signature-input,signature-agent)와 리디렉션이 봇을 어디로 보냈는지 보여주는Location응답 헤더가 로그에 포함되도록, 존에 사용자 지정 로그 필드 규칙을 추가하세요. 작업이 이를 수신하기 위해RequestHeaders및ResponseHeaders필드를 요청합니다. 존의 기존 규칙은 그대로 유지됩니다.
info
Location 헤더가 추가되기 전에 생성된 작업은 이를 전송하지 않습니다. 작업과 규칙을 교체하려면 다시 연결하거나 수동 설정을 다시 실행하세요.
info
토큰은 한 번만 사용되며 저장되지 않습니다.
수동 설정
API 토큰을 제공하고 싶지 않다면 Cloudflare API를 사용해 Logpush 작업을 수동으로 설정할 수 있습니다.
1단계 — API 토큰 받기
-
Cloudflare 대시보드로 이동하여 웹사이트의 도메인을 선택합니다.
-
"API 토큰 받기"를 클릭한 다음, 다음 권한으로 새 토큰을 생성합니다.
- 영역 → 영역 → 읽기
- Zone → Logs → Edit
자세한 안내는 API 토큰 얻기를 참고하세요.
info
영역 ID를 따로 조회할 필요는 없습니다. 이 명령어들은 영역 → 영역 → 읽기 권한을 사용해 도메인에서 영역을 찾습니다.
2단계 — Logpush 작업 만들기
첫 번째 블록에 API 토큰을 입력한 다음, 아래 각 블록을 터미널에서 한 번에 하나씩 실행하고, 각각이 오류 없이 완료되는지 확인하세요. 이 명령어들을 함께 사용하면 영역을 찾고, Logpush 작업을 생성하고, 자동 설정에 설명된 사용자 지정 로그 필드 규칙을 추가합니다. 프로젝트 세부 정보가 미리 입력된 정확한 명령어는 프로젝트 설정 → 봇 애널리틱스 → 수동으로 설정에서 확인할 수 있습니다.
export CF_TOKEN="<your Cloudflare API token>"
BASE="https://api.cloudflare.com/client/v4"
Find the Cloudflare zone for yourwebsite.com
ZONE_ID=$(curl -s --fail-with-body "$BASE/zones?name=yourwebsite.com&status=active&match=all" \
-H "Authorization: Bearer $CF_TOKEN" | jq -r '.result[0].id // error("no active Cloudflare zone found for yourwebsite.com")')
echo "ZONE_ID=$ZONE_ID"
Remove the existing Logpush job if present
OLD_JOB_ID=$(curl -s --fail-with-body "$BASE/zones/$ZONE_ID/logpush/jobs" \
-H "Authorization: Bearer $CF_TOKEN" | jq -r '([(.result // [])[] | select(.name == "ahrefs-web-analytics-http-requests")])[0].id // ""')
echo "OLD_JOB_ID=$OLD_JOB_ID"
if [ -n "$OLD_JOB_ID" ]; then
curl -s --fail-with-body "$BASE/zones/$ZONE_ID/logpush/jobs/$OLD_JOB_ID" -X DELETE \
-H "Authorization: Bearer $CF_TOKEN"
fi
Create the Logpush job
curl -s --fail-with-body "$BASE/zones/$ZONE_ID/logpush/jobs" -X POST \
-H "Authorization: Bearer $CF_TOKEN" \
-H "Content-Type: application/json" \
--data-binary '{"name":"ahrefs-web-analytics-http-requests","destination_conf":"https://analytics.ahrefs.com/api/cf_logpush/http_requests?header_x-ahrefs-web-analytics-property=YOUR_PROPERTY_KEY","dataset":"http_requests","frequency":"high","filter":"{\"where\":{\"or\":[{\"key\":\"ClientRequestHost\",\"operator\":\"eq\",\"value\":\"yourwebsite.com\"},{\"key\":\"ClientRequestHost\",\"operator\":\"endsWith\",\"value\":\".yourwebsite.com\"}]}}","output_options":{"field_names":["ClientIP","ClientRequestMethod","ClientRequestHost","ClientRequestProtocol","ClientRequestScheme","ClientRequestURI","ClientRequestPath","ClientRequestUserAgent","ClientRequestReferer","EdgeStartTimestamp","EdgeEndTimestamp","EdgeResponseStatus","EdgeResponseBytes","EdgeResponseContentType","EdgeTimeToFirstByteMs","ClientCountry","ClientCity","ClientASN","ClientDeviceType","ClientRegionCode","BotScore","BotScoreSrc","BotTags","VerifiedBotCategory","RayID","RequestHeaders","ResponseHeaders"],"timestamp_format":"unixnano"},"enabled":true}'
Add the custom log fields rule
RULES=$(curl -s --fail-with-body "$BASE/zones/$ZONE_ID/rulesets/phases/http_log_custom_fields/entrypoint" \
-H "Authorization: Bearer $CF_TOKEN" | jq -c '.result.rules // []')
echo "RULES=$RULES"
BODY=$(jq -nc --argjson rules "$RULES" \
'{rules: ([$rules[] | select(.description != "ahrefs-web-analytics-web-bot-auth-signature")] + [{"action":"log_custom_field","expression":"true","description":"ahrefs-web-analytics-web-bot-auth-signature","action_parameters":{"request_fields":[{"name":"signature"},{"name":"signature-input"},{"name":"signature-agent"}],"response_fields":[{"name":"location"}]}}])}')
curl -s --fail-with-body "$BASE/zones/$ZONE_ID/rulesets/phases/http_log_custom_fields/entrypoint" -X PUT \
-H "Authorization: Bearer $CF_TOKEN" \
-H "Content-Type: application/json" \
--data-binary "$BODY"
info
BotScore, BotScoreSrc, BotTags 필드는 Cloudflare Bot Management 구독이 있어야만 사용할 수 있습니다. 다만 봇 애널리틱스는 이 필드 없이도 작동하지만, 포함하면 봇 분류가 개선됩니다. 사용 중인 zone에 Bot Management가 없다면, 작업을 생성하기 전에 field_names에서 이 세 필드를 제거하세요.
warning
destination_conf URL과 property key는 프로젝트마다 고유합니다. 올바른 값이 적용되도록 프로젝트 설정 → 봇 애널리틱스 페이지에서 정확한 명령어를 복사하세요.
3단계 — 연결 확인
작업을 만든 후 Ahrefs의 프로젝트 설정 → 봇 애널리틱스로 돌아가서 상태 확인을 클릭해 데이터가 수신되고 있는지 확인하세요. 데이터가 들어오지 않으면 DNS 레코드가 프록시되어 있는지 확인하세요.