概要
Cloudflare の Logpush は、HTTP リクエストログを Amazon S3 などの宛先にエクスポートします。これらのログを ClickStack に転送すると、次のことが可能になります。
- エッジトラフィック、キャッシュのパフォーマンス、セキュリティイベントを、他のオブザーバビリティデータとあわせて分析する
- ClickHouse SQL を使用してログをクエリする
- Cloudflare のデフォルトの保持期間を超えてログを保持する
このガイドでは、ClickPipes を使用して、Cloudflare のログファイルを S3 から ClickHouse に継続的に取り込みます。S3 は Cloudflare と ClickHouse の間で耐久性のあるバッファとして機能し、exactly-once セマンティクスとリプレイ機能を提供します。
既存の Cloudflare Logpush とのインテグレーション
このセクションでは、Cloudflare Logpush がログを S3 にエクスポートするよう設定済みであることを前提としています。まだ設定していない場合は、先に Cloudflare の AWS S3 セットアップガイド に従って設定してください。
前提条件
- ClickHouse Cloud service が稼働していること (ClickPipes は Cloud 専用機能のため、ClickStack OSS では利用できません)
- Cloudflare Logpush が S3 バケットにログを継続的に書き込んでいること
- Cloudflare がログを書き込む S3 バケットの名前とリージョン
S3 認証を設定する
ClickPipes が S3 バケットから読み取るには、権限が必要です。S3 データへ安全にアクセスする ガイドに従って、IAM ロールベースのアクセスまたは認証情報ベースのアクセスを設定してください。
ClickPipes の S3 認証と権限の詳細については、S3 ClickPipes リファレンス ドキュメントを参照してください。
ClickPipes ジョブを作成する
- ClickHouse Cloud Console → Data Sources → Create ClickPipe
- Source: Amazon S3

Connection:
- S3 file path: Cloudflare ログのバケットパスに、ファイルを一致させるためのワイルドカードを付けて指定します。Logpush で日次サブフォルダを有効にしている場合は、サブディレクトリをまたいで一致させるために
**を使用します。- サブフォルダなし:
https://your-bucket.s3.us-east-1.amazonaws.com/logs/* - 日次サブフォルダあり:
https://your-bucket.s3.us-east-1.amazonaws.com/logs/**/*
- サブフォルダなし:
- Authentication: 認証方式を選択し、資格情報または IAM Role ARN を指定します
Ingestion settings:
Incoming data をクリックし、次のように設定します。
- Continuous ingestion をオンにする
- Ordering: 辞書式順序

Cloudflare Logpush は日付ベースの名前 (例: 20250127/...) でファイルを書き込むため、自然に辞書式順序になります。ClickPipes は 30 秒ごとに新しいファイルをポーリングし、最後に処理したファイル名より後のファイルを取り込みます。
Schema mapping:
Parse information をクリックします。ClickPipes はログファイルをサンプルしてスキーマを自動検出します。マッピングされたカラムを確認し、必要に応じて型を調整してください。宛先テーブルの Sorting key を定義します。Cloudflare ログでは、(EdgeStartTimestamp, ClientCountry, EdgeResponseStatus) が適切です。

Complete Setup をクリックします。
HyperDX のデータソースを設定する
ClickPipes は、Cloudflare のネイティブなフィールド名を持つフラットなテーブルに Cloudflare ログを取り込みます。これらのログを HyperDX で表示するには、Cloudflare のカラムを HyperDX のログビューにマッピングするカスタムデータソースを設定します。
- HyperDX → チーム設定 → ソース を開きます

- ソースを追加 をクリックし、以下の設定を行います。すべてのフィールドにアクセスするには、オプションフィールドを設定 をクリックします。

| 設定 | 値 |
|---|---|
| 名前 | Cloudflare Logs |
| ソースデータタイプ | Log |
| データベース | default |
| テーブル | cloudflare_http_logs |
| タイムスタンプカラム | toDateTime(EdgeStartTimestamp / 1000000000) |
| デフォルトの選択項目 | EdgeStartTimestamp, ClientRequestMethod, ClientRequestURI, EdgeResponseStatus, ClientCountry |
| サービス名式 | 'cloudflare' |
| ログレベル式 | multiIf(EdgeResponseStatus >= 500, 'ERROR', EdgeResponseStatus >= 400, 'WARN', 'INFO') |
| 本文式 | concat(ClientRequestMethod, ' ', ClientRequestURI, ' ', toString(EdgeResponseStatus)) |
| ログ属性式 | 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) |
| リソース属性式 | map('cloudflare.zone', ClientRequestHost) |
| 暗黙的カラム式 | concat(ClientRequestMethod, ' ', ClientRequestURI) |
- ソースを保存 をクリックします

これにより、データの変換や複製を行うことなく、Cloudflare のネイティブカラムが HyperDX のログビューアに直接マッピングされます。Body には GET /api/v1/users 200 のようなリクエストの要約が表示され、すべての Cloudflare フィールドを検索可能な属性として利用できます。
HyperDXでデータを確認する
Search ビューに移動し、Cloudflare ログ のログソースを選択します。データが含まれる期間に時間範囲を設定します。次のようなログエントリが表示されます。
- Body カラム内のリクエストの概要 (例:
GET /api/v1/users 200) - HTTP ステータスに応じて色分けされた重大度レベル (2xx は INFO、4xx は WARN、5xx は ERROR)
http.status_code、client.country、cache.status、bot.scoreなどの検索可能な属性


デモデータセット
本番の Cloudflare Logpush を設定する前にインテグレーションをテストしたいユーザー向けに、実際の HTTP リクエストログに近いサンプルデータセットを提供しています。
デモデータセットで ClickPipes を開始する
- 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 - Incoming data をクリックします
- フォーマットとして JSON を選択します
- Parse information をクリックし、検出されたスキーマを確認します
- Table name を
cloudflare_http_logsに設定します - Complete Setup をクリックします
このデータセットには、24 時間分の 5,000 件の HTTP リクエストログが含まれており、複数の国からのトラフィック、キャッシュのヒットとミス、API リクエストや静的アセットへのリクエスト、エラーレスポンス、セキュリティイベントなど、現実的なパターンが再現されています。
HyperDX データソースを設定する
データソースの設定手順 に従って、cloudflare_http_logs テーブルを参照する HyperDX のログソースを作成します。本番インテグレーションのセクションですでにログソースを設定している場合は、この手順は不要です。
デモデータを確認する
SELECT count() FROM cloudflare_http_logs;
-- 5000 が返るはずですHyperDX の Search ビューに移動し、Cloudflare Logs ソースを選択して、時間範囲を 2026-02-23 00:00:00 - 2026-02-26 00:00:00 に設定します。
リクエストの概要、検索可能な Cloudflare 属性、HTTP ステータスコードに基づく重大度レベルを含むログエントリが表示されるはずです。


ダッシュボードと可視化
ダッシュボード設定をダウンロード
ダッシュボードをインポート
- HyperDX → Dashboards → Import Dashboard

cloudflare-logs-dashboard.jsonをアップロード → Finish Import

ダッシュボードを表示

トラブルシューティング
ClickHouseにデータが表示されない
テーブルが作成されており、データが格納されていることを確認します。
SHOW TABLES FROM default LIKE 'cloudflare_http_logs';
SELECT count() FROM cloudflare_http_logs;テーブルは存在していても空の場合は、ClickPipes のエラーを確認してください:ClickHouse Cloud Console → Data Sources → Your ClickPipe → Logs。プライベートバケットの認証に関する問題については、S3 ClickPipes アクセス制御のドキュメントを参照してください。
HyperDX にログが表示されない
データは ClickHouse にあるのに HyperDX に表示されない場合は、ログソースの設定を確認してください。
- HyperDX → Team Settings → SOURCES に
cloudflare_http_logsのログソースがあることを確認します - Timestamp Column が
toDateTime(EdgeStartTimestamp / 1000000000)に設定されていることを確認します — Cloudflare のタイムスタンプはナノ秒単位のため、変換が必要です - HyperDX の時間範囲にデータが含まれていることを確認します。デモデータセットでは、2026-02-23 00:00:00 - 2026-02-26 00:00:00 を使用します
次のステップ
- セキュリティイベント (WAFによるブロック、ボットトラフィックの急増、エラー率のしきい値) に対するアラートを設定します
- データ量に応じてデータ保持ポリシーを最適化します
- 特定のユースケース (APIパフォーマンス、cacheの最適化、地理的なトラフィック分析) 向けに、追加のダッシュボードを作成します
本番環境への移行
このガイドでは、公開デモデータセットを使用して Cloudflare ログを取り込む方法を紹介します。本番環境にデプロイする場合は、Cloudflare Logpush が独自の S3 バケットに書き込むよう設定し、安全にアクセスするために IAM ロールベース認証 を使用して ClickPipes を構成してください。ストレージコストとインジェスト量を抑えるため、必要な Logpush フィールド のみを選択してください。ファイル整理をしやすくするために Logpush で日次サブフォルダを有効にし、サブディレクトリ配下のファイルにも一致させるため、ClickPipes のパスパターンで **/* を使用してください。
バックフィルや順不同のファイルに対応する SQS ベースの順不同インジェスト を含む高度な設定オプションについては、S3 ClickPipes ドキュメント を参照してください。