Docs
Rechercher dans la documentation...⌘K

Cloudflare Logpush

Cloudflare Logpush envoie automatiquement les journaux des requêtes HTTP à Ahrefs. C’est la méthode recommandée pour les sites à fort trafic, mais elle nécessite un forfait Cloudflare Entreprise.

Prérequis

  • Un forfait Cloudflare Entreprise sur la zone que vous souhaitez surveiller.
  • Un jeton d'API Cloudflare avec les autorisations suivantes :
    • Zone → Zone → Lire
    • Zone → Logs → Edit
    • Zone → DNS → Lecture (facultatif, permet à Ahrefs de vérifier que vos enregistrements DNS sont proxifiés)
  • Pour la configuration manuelle uniquement : jq installé localement, que les commandes de configuration utilisent pour lire et mettre à jour votre configuration Cloudflare.

info

Logpush n’enregistre que les requêtes qui transitent par Cloudflare. Les enregistrements DNS configurés sur DNS uniquement (nuage gris) envoient les visiteurs directement vers votre serveur d’origine ; Bot Analytics ne reçoit donc aucune donnée les concernant. Assurez-vous que les enregistrements de votre domaine sont définis sur Proxifié (nuage orange) ; consultez l’état du proxy.

Limites et coûts

La tâche Logpush envoie une ligne de log pour chaque requête vers votre domaine et ses sous-domaines. Les requêtes provenant des navigateurs sont également envoyées ; Ahrefs écarte tout ce qui n’est pas un bot.

warning

Cloudflare autorise au maximum 4 tâches Logpush par zone. Si votre zone en compte déjà 4, la configuration échoue jusqu’à ce que vous en supprimiez une.

Cloudflare mesure l’utilisation de Logpush en octets non compressés livrés. Consultez votre contrat Entreprise pour savoir comment cela est facturé et reportez-vous à Logpush pour plus de détails.

Obtention du jeton d’API Cloudflare

Assurez-vous d’être connecté au Dashboard Cloudflare avec le bon compte. Accédez ensuite à la page https://dash.cloudflare.com/profile/api-tokens, repérez et cliquez sur le bouton Create Token en haut à droite :

Créer un jeton

Passez maintenant au flux Créer un jeton personnalisé :

Créer un jeton personnalisé

Renseignez les informations suivantes :

  • Nom du jeton API : ahrefs-bot-analytics
  • Accordez les autorisations suivantes :
    • Zone / Journaux / Modifier afin que nous puissions configurer une tâche Logpush pour envoyer les journaux vers Ahrefs Bot Analytics
    • Zone / Zone / Lire afin que nous puissions localiser la zone à configurer
    • Zone / DNS / Lecture (facultatif) afin que nous puissions vérifier que vos enregistrements DNS transitent par le proxy de Cloudflare
  • Les ressources de zone peuvent être définies sur Inclure / Toutes les zones ; sinon, sélectionnez la zone qui correspond au domaine de votre site web.
Configuration du jeton

Cliquez maintenant sur le bouton Continuer vers le récapitulatif ; le récapitulatif devrait ressembler à ceci :

Récapitulatif du jeton

Cliquez maintenant sur le bouton Créer un jeton et copiez le jeton généré dans le presse-papiers pour l’utiliser lors des étapes suivantes.

Consultez la documentation Cloudflare sur la création d’un jeton API pour plus d’informations.

Configuration automatique

  1. Dans Ahrefs, allez dans Paramètres du projet → Bot Analytics.
  2. Sélectionnez Cloudflare Logpush comme méthode.
  3. Collez votre jeton d'API Cloudflare et cliquez sur Connecter.

Ahrefs utilisera votre jeton pour :

  1. Trouver la zone correspondant au domaine de votre projet.
  2. Vérifier que vos enregistrements DNS transitent par le proxy de Cloudflare et vous avertir si ce n’est pas le cas (nécessite l’autorisation facultative Zone → DNS → Lecture).
  3. Vérifier l’existence de tâches Logpush.
  4. Créer une nouvelle tâche qui envoie des journaux à Ahrefs.
  5. Ajoutez une règle de champ de journal personnalisé à la zone afin que les journaux incluent les en-têtes de requête de vérification du bot (signature, signature-input et signature-agent) ainsi que l’en-tête de réponse Location, qui indique vers où une redirection a envoyé le bot. La tâche demande les champs RequestHeaders et ResponseHeaders pour les recevoir. Les règles existantes de votre zone sont conservées.

info

Une tâche créée avant l’ajout de l’en-tête Location ne l’envoie pas. Reconnectez-vous ou relancez la configuration manuelle afin de remplacer la tâche et la règle.

info

Votre jeton est utilisé une seule fois et n’est pas stocké.

Configuration manuelle

Si vous préférez ne pas fournir de jeton d’API, vous pouvez configurer la tâche Logpush manuellement à l’aide de l’API Cloudflare.

Étape 1 — Obtenez votre jeton API

  1. Accédez à votre Dashboard Cloudflare et sélectionnez le domaine de votre site web.

  2. Cliquez sur « Obtenir votre jeton API » et créez un jeton avec les autorisations suivantes :

    • Zone → Zone → Lire
    • Zone → Logs → Edit

    Voir Obtention d'un jeton API pour obtenir des instructions détaillées.

info

Vous n’avez pas besoin de rechercher votre ID de zone. Les commandes trouvent la zone à partir de votre domaine à l’aide de l’autorisation Zone → Zone → Lecture.

Étape 2 — Créez la tâche Logpush

Renseignez votre jeton d’API dans le premier bloc, puis exécutez chaque bloc ci-dessous, un par un, dans votre terminal, en vérifiant que chacun se termine sans erreur. Ensemble, ils trouvent votre zone, créent la tâche Logpush et ajoutent la règle de champ de journal personnalisé décrite dans Configuration automatique. Vous pouvez trouver les commandes exactes, préremplies avec les détails de votre projet, dans Paramètres du projet → Bot Analytics → Configurer manuellement.

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

Les champs BotScore, BotScoreSrc et BotTags ne sont disponibles qu’avec un abonnement à Cloudflare Bot Management. Bot Analytics fonctionne toutefois sans eux, mais les inclure améliore la classification des bots. Si votre zone ne dispose pas de Bot Management, supprimez ces trois champs de field_names avant de créer la tâche.

warning

L’URL destination_conf et la clé de propriété sont propres à votre projet. Copiez les commandes exactes depuis votre page Paramètres du projet → Bot Analytics pour vous assurer d'utiliser les bonnes valeurs.

Étape 3 — Vérifier la connexion

Après avoir créé la tâche, retournez dans Paramètres du projet → Bot Analytics dans Ahrefs et cliquez sur Vérifier l’état pour vérifier que les données sont bien reçues. Si aucune donnée n’arrive, vérifiez que vos enregistrements DNS sont proxifiés.