Docs
문서 검색...⌘K

Cloudflare Logpush

Cloudflare Logpush는 HTTP 요청 로그를 Ahrefs로 자동 전송합니다. 트래픽이 많은 사이트에 권장되는 방법이지만, Cloudflare 엔터프라이즈 플랜이 필요합니다.

사전 준비 사항

  • 모니터링하려는 Zone에 Cloudflare 엔터프라이즈 플랜이 있어야 합니다.
  • 다음 권한이 있는 Cloudflare API 토큰:
    • 영역 → 영역 → 읽기
    • Zone → Logs → Edit
  • 수동 설정의 경우에만: 설치 명령에서 Cloudflare 구성을 읽고 업데이트하는 데 사용하는 jq가 로컬에 설치되어 있어야 합니다.

Cloudflare API 토큰 가져오기

올바른 계정으로 Cloudflare 대시보드에 로그인되어 있는지 확인하세요. 그런 다음 https://dash.cloudflare.com/profile/api-tokens 페이지로 이동해 오른쪽 상단의 토큰 만들기 버튼을 찾아 클릭하세요:

토큰 생성

이제 사용자 지정 토큰 생성 흐름을 진행하세요:

사용자 지정 토큰 생성

다음 정보를 입력하세요:

  • API 토큰 이름: ahrefs-bot-analytics
  • 다음 권한을 부여하세요:
    • Ahrefs 봇 애널리틱스로 로그를 푸시하는 Logpush 작업을 구성하려면 Zone / Logs / Edit로 이동합니다.
    • 구성할 영역을 찾을 수 있도록 Zone / Zone / Read
  • Zone Resources는 Include / All Zones로 설정할 수 있으며, 또는 웹사이트 도메인에 해당하는 영역을 선택할 수도 있습니다.
토큰 구성

이제 Continue to summary 버튼을 클릭하세요. 요약은 다음과 같이 표시됩니다:

토큰 요약

이제 Create Token 버튼을 클릭하고, 생성된 토큰을 다음 단계에서 사용할 수 있도록 클립보드에 복사하세요.

추가 정보는 Cloudflare 문서의 API 토큰 생성 방법을 참고하세요.

자동 설정

  1. Ahrefs에서 프로젝트 설정 → 봇 애널리틱스로 이동합니다.
  2. 방법으로 Cloudflare Logpush를 선택합니다.
  3. Cloudflare API 토큰을 붙여넣고 Connect를 클릭합니다.

Ahrefs는 토큰을 사용하여 다음 작업을 수행합니다:

  1. 프로젝트의 도메인과 일치하는 Zone을 찾습니다.
  2. 기존 Logpush 작업 확인.
  3. Ahrefs로 로그를 보내는 새 작업을 만듭니다.
  4. 봇 검증 헤더(signature, signature-input, signature-agent)가 로그에 포함되도록 존에 사용자 지정 로그 필드 규칙을 추가합니다. 존의 기존 규칙은 그대로 유지됩니다.

info

토큰은 한 번만 사용되며 저장되지 않습니다.

수동 설정

API 토큰을 제공하고 싶지 않다면 Cloudflare API를 사용해 Logpush 작업을 수동으로 설정할 수 있습니다.

1단계 — API 토큰 받기

  1. Cloudflare 대시보드로 이동하여 웹사이트의 도메인을 선택합니다.

  2. "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"],"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"}]}}])}')

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의 프로젝트 설정 → 봇 애널리틱스로 돌아가서 상태 확인을 클릭해 데이터가 수신되고 있는지 확인하세요.