Cloudflare Logpush
Cloudflare Logpush は HTTP リクエストログを Ahrefs に自動送信します。 高トラフィックのサイトには推奨されますが、Cloudflare エンタープライズ プランが必要です。
前提条件
- 監視したいゾーンに Cloudflare エンタープライズ プランが適用されていること。
- 次の権限を持つ Cloudflare API トークン:
- ゾーン → ゾーン → 読み取り
- Zone → Logs → Edit
- 手動セットアップの場合のみ:セットアップコマンドがCloudflareの設定を読み取り・更新するために使用する、ローカルにインストールされた
jq。
Cloudflare APIトークンの取得
正しいアカウントでCloudflareダッシュボードにログインしていることを確認してください。 次に https://dash.cloudflare.com/profile/api-tokens ページに移動し、右上にある Create Token ボタンを見つけてクリックしてください:
続いて、カスタムトークンの作成フローに進みます:
以下の情報を入力してください:
- APIトークン名:ahrefs-bot-analytics
- 以下の権限を付与してください:
- Ahrefs Bot Analytics にログをプッシュする Logpush ジョブを設定できるように、Zone / Logs / Edit を有効にします
- 設定対象のゾーンを特定できるように、Zone / Zone / Read を付与します
- Zone Resources は Include / All Zones に設定できます。もしくは、ウェブサイトのドメインに対応するゾーンを選択してください。
次に Continue to summary ボタンをクリックします。サマリーは次のようになります:
Create Token ボタンをクリックし、生成されたトークンをクリップボードにコピーして、次の手順で使用してください。
詳しくは、Cloudflare のドキュメント「API トークンの作成方法」をご覧ください。
自動セットアップ
- Ahrefs で プロジェクト設定 → Bot Analytics に移動します。
- 方法として Cloudflare Logpush を選択します。
- Cloudflare API トークンを貼り付け、接続 をクリックします。
Ahrefs はトークンを使用して次を行います:
- プロジェクトのドメインに一致するゾーンを特定します。
- 既存の Logpush ジョブをチェック.
- Ahrefs にログを送信する新しいジョブを作成します。
- ボット検証ヘッダー(
signature、signature-input、signature-agent)がログに含まれるよう、ゾーンにカスタムログフィールドルールを追加します。 ゾーン上の既存ルールは保持されます。
info
お客様のトークンは一度使用され、保存されません。
手動セットアップ
API トークンを提供したくない場合は、Cloudflare API を使って Logpush ジョブを手動で設定できます。
ステップ 1 — APIトークンを取得する
-
Cloudflare ダッシュボード に移動し、ウェブサイトのドメインを選択してください。
-
「API トークンを取得」をクリックし、以下の権限で新しいトークンを作成してください。
- ゾーン → ゾーン → 読み取り
- Zone → Logs → Edit
詳しい手順は、API トークンの取得 を参照してください。
info
Zone ID を調べる必要はありません。 これらのコマンドは、ゾーン → ゾーン → 読み取り 権限を使って、ドメインからゾーンを特定します。
ステップ 2 — Logpush ジョブを作成
API トークンを最初のブロックに入力し、その後、以下の各ブロックをターミナルで1つずつ実行して、いずれもエラーなく完了することを確認してください。 これらを組み合わせると、ゾーンを特定し、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"
warning
destination_conf の URL とプロパティキーは、プロジェクトごとに固有です。 正しい値を確実に使用するために、プロジェクト設定 → ボット分析ページから正確なコマンドをコピーしてください。
ステップ 3 — 接続を確認
ジョブを作成したら、Ahrefs の プロジェクト設定 → Bot Analytics に戻り、ステータスを確認 をクリックして、データが受信されていることを確認します。