Vue d’ensemble
Cloudflare Logpush exporte les logs de requêtes HTTP vers des destinations comme Amazon S3. Le transfert de ces logs vers ClickStack vous permet de :
- Analyser le trafic edge, les performances du cache et les événements de sécurité avec le reste de vos données d’observabilité
- Interroger les logs avec ClickHouse SQL
- Conserver les logs au-delà de la période de rétention par défaut de Cloudflare
Ce guide utilise ClickPipes pour ingérer en continu les fichiers de logs Cloudflare depuis S3 dans ClickHouse. S3 sert de tampon durable entre Cloudflare et ClickHouse, avec une garantie exactly-once et la possibilité de rejouer les données.
Intégration avec une configuration Cloudflare Logpush existante
Cette section suppose que Cloudflare Logpush est configuré pour exporter les logs vers S3. Dans le cas contraire, suivez d’abord le guide de configuration AWS S3 de Cloudflare.
Prérequis
- service ClickHouse Cloud en cours de fonctionnement (ClickPipes est une fonctionnalité disponible uniquement dans Cloud — non disponible dans ClickStack OSS)
- Cloudflare Logpush écrit activement des logs dans un bucket S3
- Nom du bucket S3 et région dans laquelle Cloudflare écrit les logs
Configurer l’authentification S3
ClickPipes a besoin d'une autorisation pour lire depuis votre bucket S3. Suivez le guide Accéder aux données S3 en toute sécurité pour configurer soit un accès IAM basé sur les rôles, soit un accès basé sur des identifiants.
Pour tous les détails sur l'authentification S3 et les autorisations de ClickPipes, consultez la documentation de référence des S3 ClickPipes.
Créer un job ClickPipes
- ClickHouse Cloud Console → Sources de données → Create ClickPipe
- Source : Amazon S3

Connexion :
- Chemin de fichier S3 : le chemin de votre bucket Cloudflare logs avec un caractère générique pour correspondre aux fichiers. Si vous avez activé des sous-dossiers quotidiens dans Logpush, utilisez
**pour faire correspondre les fichiers dans tous les sous-répertoires :- Sans sous-dossiers :
https://your-bucket.s3.us-east-1.amazonaws.com/logs/* - Sous-dossiers quotidiens :
https://your-bucket.s3.us-east-1.amazonaws.com/logs/**/*
- Sans sous-dossiers :
- Authentification : sélectionnez votre méthode d’authentification et fournissez les identifiants ou l’ARN du rôle IAM
Paramètres d’ingestion :
Cliquez sur Données entrantes, puis configurez :
- Activez Ingestion continue
- Ordre : ordre lexicographique

Cloudflare Logpush écrit les fichiers avec un nom basé sur la date (par exemple, 20250127/...), ce qui suit naturellement l’ordre lexicographique. ClickPipes recherche de nouveaux fichiers toutes les 30 secondes et ingère chaque fichier dont le nom est supérieur à celui du dernier fichier traité.
Mappage du schéma :
Cliquez sur Informations d’analyse. ClickPipes prélève un échantillon de vos fichiers de logs et détecte automatiquement le schéma. Vérifiez les colonnes mappées et ajustez les types si nécessaire. Définissez une Clé de tri pour la table de destination — pour les Cloudflare logs, un bon choix est (EdgeStartTimestamp, ClientCountry, EdgeResponseStatus).

Cliquez sur Terminer la configuration.
Configurer la source de données HyperDX
ClickPipes ingère les logs Cloudflare dans une table plate avec les noms de champs natifs de Cloudflare. Pour afficher ces logs dans HyperDX, configurez une source de données personnalisée qui associe les colonnes Cloudflare à la vue des logs de HyperDX.
- Ouvrez HyperDX → Team Settings → Sources

- Cliquez sur Add source et configurez les paramètres suivants. Cliquez sur Configure Optional Fields pour accéder à tous les champs :

| Paramètre | Valeur |
|---|---|
| Name | Cloudflare Logs |
| Source Data Type | Log |
| Database | default |
| Table | cloudflare_http_logs |
| Timestamp Column | toDateTime(EdgeStartTimestamp / 1000000000) |
| Default Select | EdgeStartTimestamp, ClientRequestMethod, ClientRequestURI, EdgeResponseStatus, ClientCountry |
| Service Name Expression | 'cloudflare' |
| Log Level Expression | multiIf(EdgeResponseStatus >= 500, 'ERROR', EdgeResponseStatus >= 400, 'WARN', 'INFO') |
| Body Expression | concat(ClientRequestMethod, ' ', ClientRequestURI, ' ', toString(EdgeResponseStatus)) |
| Log Attributes Expression | map('http.method', ClientRequestMethod, 'http.status_code', toString(EdgeResponseStatus), 'http.url', ClientRequestURI, 'client.country', ClientCountry, 'client.ip', ClientIP, 'cache.status', CacheCacheStatus, 'bot.score', toString(BotScore), 'cloudflare.ray_id', RayID, 'cloudflare.colo', EdgeColoCode) |
| Resource Attributes Expression | map('cloudflare.zone', ClientRequestHost) |
| Implicit Column Expression | concat(ClientRequestMethod, ' ', ClientRequestURI) |
- Cliquez sur Save Source

Cela associe directement les colonnes natives de Cloudflare à l’affichage des logs dans HyperDX, sans transformation ni duplication des données. Le Body affiche un résumé de la requête tel que GET /api/v1/users 200, et tous les champs Cloudflare sont disponibles comme attributs de recherche.
Vérifier les données dans HyperDX
Accédez à la vue Search et sélectionnez la source Cloudflare Logs. Définissez l'intervalle de temps de façon à inclure vos données. Vous devriez voir des entrées de logs avec :
- Des résumés de requêtes dans la colonne Body (par ex. :
GET /api/v1/users 200) - Des niveaux de gravité codés par couleur selon le code HTTP (INFO pour les 2xx, WARN pour les 4xx, ERROR pour les 5xx)
- Des attributs sur lesquels vous pouvez effectuer des recherches, comme
http.status_code,client.country,cache.statusetbot.score


Jeu de données de démonstration
Pour les utilisateurs qui souhaitent tester l’intégration avant de configurer leur Cloudflare Logpush de production, nous fournissons un jeu de données d’exemple avec des logs de requêtes HTTP réalistes.
Démarrer ClickPipes avec le jeu de données de démonstration
- ClickHouse Cloud Console → Data Sources → Create ClickPipe
- Source : Amazon S3
- Authentication : Public
- S3 file path :
https://datasets-documentation.s3.eu-west-3.amazonaws.com/clickstack-integrations/cloudflare/cloudflare-http-logs.json - Cliquez sur Incoming data
- Sélectionnez JSON comme format
- Cliquez sur Parse information et vérifiez le schéma détecté
- Définissez le Table name sur
cloudflare_http_logs - Cliquez sur Complete Setup
Le jeu de données comprend 5 000 entrées de logs de requêtes HTTP sur 24 heures, avec des profils réalistes : trafic provenant de plusieurs pays, réponses servies depuis le cache ou non, requêtes API et de ressources statiques, réponses d’erreur et événements de sécurité.
Configurer la source de données HyperDX
Suivez les étapes de configuration de la source de données pour créer une source HyperDX pointant vers la table cloudflare_http_logs. Si vous avez déjà configuré la source dans la section consacrée à l’intégration de production, cette étape n’est pas nécessaire.
Vérifier les données de démonstration
SELECT count() FROM cloudflare_http_logs;
-- Doit renvoyer 5000Accédez à la vue Search dans HyperDX, sélectionnez la source Cloudflare Logs et définissez l’intervalle de temps sur 2026-02-23 00:00:00 - 2026-02-26 00:00:00.
Vous devriez voir des entrées de logs avec des résumés de requêtes, des attributs Cloudflare interrogeables et des niveaux de gravité basés sur les codes d’état HTTP.


Tableaux de bord et visualisation
Télécharger la configuration du tableau de bord
Importer un tableau de bord
- HyperDX → Dashboards → Import Dashboard

- Téléversez
cloudflare-logs-dashboard.json→ Finish Import

Afficher le tableau de bord

Dépannage
Les données n’apparaissent pas dans ClickHouse
Vérifiez que la table a bien été créée et qu’elle contient des données :
SHOW TABLES FROM default LIKE 'cloudflare_http_logs';
SELECT count() FROM cloudflare_http_logs;Si la table existe mais est vide, vérifiez si ClickPipes signale des erreurs : ClickHouse Cloud Console → Data Sources → Votre ClickPipe → Logs. Pour les problèmes d’authentification liés aux buckets privés, consultez la documentation sur le contrôle d’accès pour S3 ClickPipes.
Les logs n'apparaissent pas dans HyperDX
Si les données sont bien dans ClickHouse mais ne s'affichent pas dans HyperDX, vérifiez la configuration de la source de données :
- Vérifiez qu'une source existe pour
cloudflare_http_logsdans HyperDX → Team Settings → Sources - Assurez-vous que Timestamp Column est définie sur
toDateTime(EdgeStartTimestamp / 1000000000)— les timestamps Cloudflare sont en nanosecondes et doivent être convertis - Vérifiez que la plage horaire définie dans HyperDX couvre bien les données. Pour le jeu de données de démonstration, utilisez 2026-02-23 00:00:00 - 2026-02-26 00:00:00
Étapes suivantes
- Configurez des alertes pour les événements de sécurité (blocages WAF, pics de trafic de bots, seuils de taux d’erreur)
- Optimisez les politiques de rétention en fonction de votre volume de données
- Créez des tableaux de bord supplémentaires pour des cas d’usage spécifiques (performances des API, optimisation du cache, analyse géographique du trafic)
Passage en production
Ce guide montre comment ingérer des logs Cloudflare à l’aide d’un jeu de données de démonstration public. Pour les déploiements en production, configurez Cloudflare Logpush pour écrire dans votre propre bucket S3 et configurez ClickPipes avec une authentification basée sur les rôles IAM afin de sécuriser l’accès. Sélectionnez uniquement les champs Logpush dont vous avez besoin afin de réduire les coûts de stockage et le volume d’ingestion. Activez les sous-dossiers quotidiens dans Logpush pour mieux organiser les fichiers, et utilisez **/* dans le modèle de chemin ClickPipes pour faire correspondre les fichiers dans tous les sous-répertoires.
Consultez la documentation S3 ClickPipes pour les options de configuration avancées, notamment l’ingestion non ordonnée basée sur SQS, utile pour gérer les reprises de données historiques et les fichiers arrivant dans le désordre.