要点このガイドでは、ClickPipes を使って Cloudflare ログを ClickStack に取り込む方法を説明します。Cloudflare Logpush はログを S3 に書き込み、ClickPipes は新しいファイルを継続的に ClickHouse にインジェストします。OpenTelemetry Collector を使うことの多い ClickStack のインテグレーションガイドとは異なり、このガイドでは ClickPipes を使用して S3 からデータを直接取り込みます。本番環境へのインジェストを設定する前にダッシュボードを確認したい場合は、デモデータセットを利用できます。
概要
- エッジトラフィック、キャッシュのパフォーマンス、セキュリティイベントを、他のオブザーバビリティデータとあわせて分析する
- ClickHouse SQL を使用してログをクエリする
- Cloudflare のデフォルトの保持期間を超えてログを保持する
代替手段: HTTP 経由の直接取り込みCloudflare Logpush は、ログを直接 HTTP endpoints にプッシュすることもサポートしています。Cloudflare はログを newline-delimited JSON (NDJSON) としてエクスポートし、ClickHouse は
JSONEachRow を介してこのフォーマットをネイティブに受け付けるため、以下のエンドポイント URL 形式を使用して、Logpush の送信先を ClickHouse Cloud の HTTP インターフェイスに直接指定できます。YOUR_CLICKHOUSE_HOST は ClickHouse Cloud のホスト名に、BASE64_CREDENTIALS は Base64 エンコードされた認証情報 (echo -n 'default:YOUR_PASSWORD' | base64) に置き換えてください。こちらのほうが設定は簡単です (S3、SQS、IAM の設定は不要) が、配信に失敗した場合、Cloudflare Logpush は履歴データを後から補完できません。そのため、プッシュ中に ClickHouse が利用できないと、それらのログは完全に失われます。既存の Cloudflare Logpush とのインテグレーション
前提条件
- 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
- 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 を指定します
- Continuous ingestion をオンにする
- Ordering: 辞書式順序
20250127/...) でファイルを書き込むため、自然に辞書式順序になります。ClickPipes は 30 秒ごとに新しいファイルをポーリングし、最後に処理したファイル名より後のファイルを取り込みます。Schema mapping:Parse information をクリックします。ClickPipes はログファイルをサンプルしてスキーマを自動検出します。マッピングされたカラムを確認し、必要に応じて型を調整してください。宛先テーブルの Sorting key を定義します。Cloudflare ログでは、(EdgeStartTimestamp, ClientCountry, EdgeResponseStatus) が適切です。Complete Setup をクリックします。作成直後、ClickPipes は継続的なポーリングに切り替わる前に、指定したパス内の既存のすべてのファイルに対して初期ロードを実行します。バケットに Cloudflare ログが大量にたまっている場合、この初期ロードには時間がかかることがあります。
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) |
- ソースを保存 をクリックします
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などの検索可能な属性
デモデータセット
デモデータセットで 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 をクリックします
HyperDX データソースを設定する
データソースの設定手順 に従って、cloudflare_http_logs テーブルを参照する HyperDX のログソースを作成します。本番インテグレーションのセクションですでにログソースを設定している場合は、この手順は不要です。デモデータを確認する
タイムゾーン表示HyperDX はタイムスタンプをブラウザーのローカルタイムゾーンで表示します。デモデータの期間は 2026-02-24 00:00:00 - 2026-02-25 00:00:00 (UTC) です。時間範囲を広めに設定しているため、どこからアクセスしてもデモログを確認できます。ログが表示されたら、より見やすく可視化するために、範囲を 24 時間に絞り込めます。
ダッシュボードと可視化
してダッシュボード設定を取得
ダッシュボードをインポート
- HyperDX → Dashboards → Import Dashboard
cloudflare-logs-dashboard.jsonをアップロード → Finish Import
ダッシュボードを表示
デモデータセットを使用する場合は、時間範囲を 2026-02-24 00:00:00 - 2026-02-25 00:00:00 (UTC) に設定してください (ローカルのタイムゾーンに合わせて調整してください) 。インポートしたダッシュボードには、デフォルトで時間範囲は設定されていません。
トラブルシューティング
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の最適化、地理的なトラフィック分析) 向けに、追加のダッシュボードを作成します
本番環境への移行
**/* を使用してサブディレクトリをまたいで一致させます。
バックフィルや順不同のファイルに対応する SQS ベースの順不同インジェスト を含む高度な設定オプションについては、S3 ClickPipes ドキュメント を参照してください。