コンテンツにスキップ

Google Cloud

概要

このチュートリアルでは、Cloudflare Logsデータを分析できるように、特定のGoogle Cloud Platform (GCP)コンポーネントを構成する方法を説明します。

進める前に、Google Cloud StorageでCloudflare Logpushを有効にする必要があります。これにより、ログデータが分析可能になります。

このチュートリアルで使用するコンポーネントは以下の通りです:

  • Google Cloud Function:Google Cloud StorageからGoogle BigQueryにログをインポートするため
  • Google BigQuery:ログデータをレポーティングエンジンに提供するため
  • Google Data Studio:インタラクティブなレポートを実行するため

以下の図は、Cloudflare LogsからGoogle Cloud Platformのさまざまなコンポーネントを通じてデータが流れる様子を示しています。

Cloudflare LogpushからGoogle Cloud Platformへのデータフロー

タスク 1 - Google Cloud Functionを使用してログデータをGoogle BigQueryにインポートする

Cloudflare Logpushを構成して、ログをGoogle Cloud Storageバケットに送信するように設定した後、デフォルトで5分ごとにログデータが更新されます。

Google BigQueryは、構造化クエリ言語(SQL)を使用してクエリを実行するためと、Google Data Studioレポーティングエンジンのデータソースとして構成するためにデータを提供します。BigQueryは、高度にスケーラブルなクラウドデータベースで、SQLクエリは非常に高速に実行されます。

Google Cloud StorageからGoogle BigQueryにデータをインポートするには、Google Cloud Functionを使用して関数を作成し、Google Cloud Shellで実行する必要があります。この関数は、新しいCloudflareログデータがGoogle Cloud Storageバケットにアップロードされるたびにトリガーされます。

Google Cloud Functionをクローンしてデプロイする

Google Cloud StorageからGoogle BigQueryにデータをインポートするためのクラウド関数を作成するには、Cloudflareの以下のGitHubリポジトリが必要です:https://github.com/cloudflare/GCS-To-Big-Query

クラウド関数をクローンしてデプロイするには:

  1. Google Cloud Platformコンソールを開き、Google Shellアイコン(Cloud Shellを有効にする)をクリックしてGoogle Cloud Platformシェルを実行します。

  2. 次のコマンドを実行して、_master_のzipアーカイブをダウンロードし、ファイルを新しいディレクトリに解凍し、コマンドラインプロンプトを新しいディレクトリに変更します:curl -LO "https://github.com/cloudflare/cloudflare-gcp/archive/master.zip" && unzip master.zip && cd cloudflare-gcp-master/logpush-to-bigquery

  3. 次に、deploy.shファイルを編集し、以下の設定を確認します:

  • BUCKET_NAMEは、Cloudflare LogpushをGoogle Cloud Platformで構成したときに作成したバケットに設定します。

  • DATASETTABLEは一意の名前にします。

    deploy.shの内容は次のようになります:

    Terminal window
    .
    .
    .
    BUCKET_NAME="my_cloudflarelogs_gcp_storage_bucket"
    DATASET="my_cloudflare_logs"
    TABLE="cloudflare_logs"
    .
    .
    .
  1. 次に、Google Shellで次のコマンドを実行して、クラウド関数のインスタンスをデプロイします:

    Terminal window
    sh ./deploy.sh

新しいクラウド関数をデプロイしたら、Google Cloud Platform > Compute > Cloud Functionsに移動して、Cloud Functionsインターフェースに表示されることを確認します。

また、Google Cloud Platform > Big Data > BigQueryで適切なプロジェクトに移動して、データがBigQueryのテーブルに表示されることを確認します。

すべてが正しく構成されていれば、Google Data StudioやBigQueryを入力ソースとしてサポートする他の分析ツールを使用して、リクエストをクエリしたり、データを視覚化したりできます。

Google Cloud Functionにフィールドを追加する

Cloud Functionにフィールドを追加するには、schema.jsonファイルを編集します。

  1. Google Cloud Functionを開きます。

  2. 更新したい関数を選択します。

  3. 関数の詳細ページでEDITをクリックします。

  4. ファイルのリストからschema.jsonを選択します。

  5. ファイルエディタで、追加したいフィールドのnametype、およびmodeを入力します。ファイルに示されている形式に従ってください。

  6. Deployをクリックします。

Cloud Functionでデバッグするには、関数の詳細ページでVIEW LOGSをクリックします。これにより、エラーが表示されるLogs Viewerに移動します。

BigQueryにフィールドを追加する

BigQueryにフィールドを追加するには、スキーマを編集します。

  1. BigQueryを開きます。

  2. メニューでyour-project-nameを展開します。

  3. cloudflare_dataを展開し、cf_analytics_logsをクリックします。

  4. Schemaタブを選択します。

  5. ページの下部までスクロールし、Edit schemaをクリックします。

  6. ポップアップページで、Add fieldをクリックします。フィールドのNameを入力し、ドロップダウンからフィールドのTypeModeを選択します。

  7. Saveをクリックします。

タスク 2 - Google Data Studioでログデータを分析する

ログを分析し視覚化するには、Google Data StudioまたはGoogle BigQueryを入力ソースとしてサポートする他のサードパーティサービスを使用できます。

Google Data Studioを使用すると、Google BigQueryテーブルからグラフやチャートを生成できます。また、レポート内のデータを更新し、リアルタイム分析を取得することもできます。

Cloudflare Logs Insightsテンプレートについて

Cloudflareは、Google Data Studio Report GalleryLogs Insights Templateを公開しています。

Google Data Studio Report GalleryのCloudflare Logs Insightsテンプレート

Cloudflare Insightsテンプレートには、Cloudflare Logsデータを分析するためのいくつかのダッシュボードまたはレポートページが含まれています。また、ダッシュボード内でフィルターを使用して、日付と時間、デバイスタイプ、国、ユーザーエージェント、クライアントIP、ホスト名などで分析を絞り込むことができます。これらのインサイトは、デバッグやトレースにも役立ちます。

Insightsテンプレートには以下のダッシュボードが含まれています:

  • Snapshot:Cloudflareログからの最も重要なメトリックの概要を提供します。リクエストの総数、地理別のトップ訪問者、IP、ユーザーエージェント、トラフィックタイプ、脅威の総数、帯域幅の使用量などが含まれます。

  • SecurityWeb Application Firewallによる脅威の特定と緩和に関するインサイトを提供します。これには、Firewall RulesRate Limiting、およびIP Firewallが含まれます。メトリックには、停止された脅威の総数、脅威トラフィックのソース、ブロックされたIPとユーザーエージェント、トップ脅威リクエスト、セキュリティイベント(SQLインジェクション、XSSなど)、およびレート制限が含まれます。このデータを使用して、明らかな脅威をターゲットにし、誤検知を避けるためにファイアウォールを微調整します。

  • Performance:遅いページやキャッシュの誤設定などの問題を特定し対処するのに役立ちます。メトリックには、総帯域幅とキャッシュされた帯域幅、キャッシュ比率、トップの未キャッシュリクエスト、静的コンテンツと動的コンテンツ、最も遅いURIなどが含まれます。

  • Reliability:ウェブサイトやアプリケーションの可用性に関するインサイトを提供します。メトリックには、オリジン応答エラー比率、オリジン応答ステータスの時間経過、3xx/4xx/5xxエラーの割合などが含まれます。

Insightsテンプレートに基づいてレポートを作成する

Cloudflareテンプレートに基づいてログデータのレポートを作成するには:

  1. Data StudioでCloudflareのテンプレートを開き、Use Templateをクリックします。_新しいレポートを作成_ダイアログが開きます。

  2. New Data Sourceドロップダウンで、Create New Data Sourceを選択します。追加の構成詳細を入力できるページが開きます。

  3. Google Connectorsの下で、BigQueryカードを見つけてSelectをクリックします。

  4. 次に、MY PROJECTSの下で、ProjectDataset、およびTableを選択します。

  5. 右上のConnectをクリックします。

  6. Cloudflare Logsフィールドのリストで、_EdgeStartTimestamp_を見つけ、3つの縦の点をクリックしてDuplicateを選択します。これにより、_EdgeStartTimestamp_のすぐ下に_Copy of EdgeStartTimestamp_が作成されます。

  7. Copy of EdgeStartTimestamp_のTypeを_Date & Time > _Date Hour (YYYYMMDDHH)_に設定します。

  8. 次に、以下のフィールドのTypeを次のように更新します:

Cloudflare Log FieldType
ZoneIDText
EdgeColoIDText
ClientSrcPortText
EdgeResponseStatusNumber
Copy of EdgeStartTimestampDate & Time > Date Hour (YYYYMMDDHH)
OriginResponseStatusNumber
ClientASNText
ClientCountryGeo > Country
  1. 次に、脅威を特定し計算するための新しいフィールドを追加します。右上の**+ ADD A FIELD**をクリックし、フィールド追加UIで:

    • Field Nameに_Threats_と入力します。

    • Formulaテキストボックスに次のコードを貼り付けます:

    CASE
    WHEN EdgePathingSrc = "user" AND EdgePathingOp = "ban" AND EdgePathingStatus = "ip" THEN "ip block"
    WHEN EdgePathingSrc = "user" AND EdgePathingOp = "ban" AND EdgePathingStatus = "ctry" THEN "country block"
    WHEN EdgePathingSrc = "user" AND EdgePathingOp = "ban" AND EdgePathingStatus = "zl" THEN "routed by zone lockdown"
    WHEN EdgePathingSrc = "user" AND EdgePathingOp = "ban" AND EdgePathingStatus = "ua" THEN "blocked user agent"
    WHEN EdgePathingSrc = "user" AND EdgePathingOp = "ban" AND EdgePathingStatus = "rateLimit" THEN "rate-limiting rule"
    WHEN EdgePathingSrc = "bic" AND EdgePathingOp = "ban" AND EdgePathingStatus = "unknown" THEN "browser integrity check"
    WHEN EdgePathingSrc = "hot" AND EdgePathingOp = "ban" AND EdgePathingStatus = "unknown" THEN "blocked hotlink"
    WHEN EdgePathingSrc = "macro" AND EdgePathingOp = "chl" AND EdgePathingStatus = "captchaFail" THEN "CAPTCHA challenge failed"
    WHEN EdgePathingSrc = "macro" AND EdgePathingOp = "chl" AND EdgePathingStatus = "jschlFail" THEN "java script challenge failed"
    WHEN EdgePathingSrc = "filterBasedFirewall" AND EdgePathingOp = "ban" AND EdgePathingStatus = "unknown" THEN "blocked by filter based firewall"
    WHEN EdgePathingSrc = "filterBasedFirewall" AND EdgePathingOp = "chl" THEN "challenged by filter based firewall"
    Else "Other"
    END
    • 右下のSaveをクリックします。
  2. 最後に、ステータスエラーコードをグループ化するための新しいフィールドを追加します。右上の**+ ADD A FIELD**をクリックし、フィールド追加UIで:

    • Field Nameに_EdgeResponseStatusClass_と入力します。
    • Formulaテキストボックスに次のコードを貼り付けます:
    CASE
    WHEN EdgeResponseStatus > 199 AND EdgeResponseStatus < 300 THEN "2xx"
    WHEN EdgeResponseStatus > 299 AND EdgeResponseStatus < 400 THEN "3xx"
    WHEN EdgeResponseStatus > 399 AND EdgeResponseStatus < 500 THEN "4xx"
    WHEN EdgeResponseStatus > 499 AND EdgeResponseStatus < 600 THEN "5xx"
    WHEN EdgeResponseStatus = 0 THEN "0 - Served from CF Edge"
    Else "Other"
    END
    • 右下のSaveをクリックします。
  3. 最後に、右上のAdd to Reportをクリックします。

フィールドとフィルターの手動更新

レポートを追加した後、すべてのレポートコンポーネントが正常にレンダリングされないことに気付くでしょう。これを修正するには、影響を受けたレポートコンポーネントに表示される無効な次元、メトリック、またはフィルターに関連するエラーを解決する必要があります。

新しいフィールドでData Studioを更新する

BigQueryに追加されたフィールドでData Studioを更新するには、データソースのフィールドを更新します。

  1. Data StudioでCloudflareダッシュボードをEditモードで開きます。

  2. Resourceメニューを展開し、Manage added data sourcesを選択します。

  3. 更新したいデータソースのEDITアクションをクリックします。

  4. テーブルの下にあるREFRESH FIELDSをクリックします。BigQueryでField changes foundのウィンドウがポップアップします。

  5. 新しいフィールドを追加するには、APPLYをクリックします。

Data Studioでカスタムフィールドを直接作成することもできます。

  1. Data StudioでCloudflareダッシュボードをEditモードで開きます。

  2. Resourceメニューを展開し、Manage added data sourcesを選択します。

  3. カスタムフィールドを追加したいデータソースのEDITアクションをクリックします。

  4. テーブルの上にあるADD A FIELDをクリックします。

  5. Formulaエディタに数式を入力します。

  6. SAVEをクリックします。

無効なメトリックまたは次元エラーを修正する

以下の表は、修正が必要な特定のコンポーネントを要約しています:

レポートページコンポーネント追加するフィールド
2 Security Cloudflare 

Threats (スコアカード)

 Threats (メトリック)

Threats - Record Count (テーブル)

 Threats (次元)

 Threats Over Time (エリアチャート)

 Threats (ブレークダウンドメトリック)
3 Reliability Cloudflare

過去24時間のステータスコード (棒グラフ)

Copy of EdgeStartTimeStamp (次元)

5 Last 100s Requests Cloudflare

Last 100 Requests (テーブル)

 Copy of EdgeStartTimeStamp

上記のレポートコンポーネントそれぞれについて:

  1. 影響を受けるレポートコンポーネントを選択します。

  2. 右側のメニューで、Dataタブの下にあるInvalid DimensionまたはInvalid Metric(該当する場合)を見つけてクリックします。Field Pickerパネルが開きます。

  3. 追加するフィールドを検索または入力し、クリックして選択します。

  4. 完了するには、パネルの外をクリックしてメインレポートに戻ります。

コンポーネントは正しくレンダリングされるはずです。

データフィルターの更新

この修正はレポートページ3 Reliability Cloudflareに適用され、以下のスコアカードコンポーネントに関連しています:

  • 5xx Errors
  • 4xx Errors
  • 3xx Errors

各スコアカードに関連するフィルターを更新するには:

  1. 影響を受けるレポートコンポーネントを選択します。

  2. 右側のメニューで、Dataタブの下にあるFilters > Scorecard Filterセクションを見つけ、フィルター名の横にあるpencilをクリックして編集します。Edit Filterパネルが開きます。

  3. フィルタリング基準セクションで、ドロップダウンをクリックし、_EdgeResponseStatusClass_フィールドをスクロールまたは検索して選択します。

  4. 完了するには、右下のSaveをクリックします。

コンポーネントは正しくレンダリングされるはずです。