サーバーレス ピクセル トラッキングの方法

このチュートリアルでは、ピクセル トラッキング インフラストラクチャを設定する方法について説明します。このチュートリアルでは、ウェブサイトの設定についてではなく、ウェブページなどのパブリッシャのプロパティに埋め込むことができるピクセルを URL を通じて使用可能にする方法を示します。

このインフラストラクチャの例には、3 つの主な機能があります。次の機能です。

  • 提供: 場合によっては毎秒数十万リクエストを処理できるような、スケーラブルで高速なオブジェクト ストレージが必要です。このチュートリアルでは Cloud Storage の使用方法を説明します。
  • 収集: ピクセルに対して送信された HTTP リクエストを取得します。このチュートリアルでは、Stackdriver Logging を利用する Google Compute Engine の HTTP ロードバランサを使います。
  • 分析: ユーザーがページにアクセスするたびにピクセルが読み込まれます。このようなリクエストでは、1 秒間に数十万件のイベントが生成される可能性があります。このチュートリアルでは、Google BigQuery を使用して、パラメータを含むすべてのデータを理解できるようにします。

目標

このチュートリアルでは、次のものを作成します。

  • http://[YOUR_IP_ADDRESS]/pixel.png?[PARAMETERS] から得られるピクセル。
  • ピクセルの URL に対して行われたリクエストを記録する方法。
  • ピクセルがページによって呼び出されたかのように動作するテスト環境。この環境では、次のようなパラメータ文字列でさまざまな Key-Value ペアを組み合わせて URL を呼び出します。

    • ユーザー ID
    • 表示されているページ
    • ショッピング カートの商品
  • Google BigQuery のログ エクスポート機能は、ピクセル リクエストが発生したときに BigQuery に記録されるようにします。

  • 以下の理解に役立ついくつかのクエリ例。

    • ウェブサイトのトップユーザー
    • 訪問されたページ。
    • ショッピング カートのトップ商品。

費用

このようなアーキテクチャでは、次のような費用が発生する可能性があります。

この例では BigQuery を使用していますが、必要に応じてさまざまなオプションを選択でき、それによって別に費用が発生します。

  • Cloud Storage へのエクスポート: ピクセルログをエクスポートするためのコストが最も低い方法です。データは 1 時間ごとにエクスポートされ、ストレージの料金のみを払います。
  • BigQuery へのエクスポート: データをリアルタイムでアドホック分析ツールに提供します。関連費用には次の使用料が含まれます。

    • BigQuery ストレージ
    • BigQuery ストリーミング API
    • BigQuery クエリ
  • Cloud Pub/Sub へのエクスポート: 本チュートリアルの終盤に説明するこのソリューションは、Cloud Dataflow を活用してデータのリアルタイム集計を可能にします。このアプローチにより、BigQuery ストリーミング API のコストが制限できます。このソリューションでは次のようなコストが発生します。

    • Cloud Pub/Sub
    • Cloud Dataflow

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。

始める前に

  1. GCP Console で [リソースの管理] ページに移動します。

    [リソースの管理] ページに移動

  2. 既存のプロジェクトを選択するか、[プロジェクトを作成] をクリックして、新しい GCP プロジェクトを作成します。

ピクセル提供の設定

バケットを作成する

バケットは、Google Cloud Platform Console またはコマンドライン ツール gsutil を使用して作成できます。このチュートリアルでは、次のようなバケット名を使用することを前提としています。

    [YOUR_PREFIX]-gcs-pixel-tracking

[YOUR_PREFIX] は一意の文字列に置き換えてください。

バケットを作成するには:

GCP Console

  1. GCP Console で、Cloud Storage ブラウザに移動します。

    Cloud Storage ブラウザに移動

  2. [バケットを作成] をクリックします。
  3. [バケットを作成] ダイアログ内で、以下の属性を指定します。
  4. [作成] をクリックします。

コマンドライン

    新しい Cloud Storage バケットを作成します。[YOUR_BUCKET] は、バケット名の要件を満たすバケット名に置き換えます。
    gsutil mb gs://[YOUR_BUCKET]

バケットの権限を更新する

バケットを作成すると、そのバケットが GCP Console に表示されます。次に、バケットを一般公開します。

  1. GCP Console で、バケット行の右側にあるその他アイコンをクリックし、[バケットの権限を編集] を選択します。

    バケットに対する権限の設定

  2. [ユーザーを追加] フィールドに「allUsers」と入力します。

  3. [役割を選択] リストで [読み取り] を選択します。

    バケットに設定された権限

  4. [追加] をクリックします。

ピクセルをアップロードする

Google の公開 Cloud Storage バケットからピクセルを直接コピーできます。

gsutil cp gs://solutions-public-assets/pixel-tracking/pixel.png  gs://[YOUR_PREFIX]-gcs-pixel-tracking

あるいは、ピクセルをローカルに作成してから GCP Console にアップロードすることもできます。

  1. バケットの一覧から [YOUR_PREFIX]-gcs-pixel-tracking をクリックします。
  2. [ファイルをアップロード] をクリックし、表示されるダイアログ ボックスでファイルを選択して [開く] をクリックします。
  3. バケット内のオブジェクトのリストで、アップロードしたピクセルの横にある [公開リンク] チェックボックスをオンにします。

    ピクセルの公開

ロードバランサを設定する

この時点で、Cloud Storage バケットには、一般公開された非表示のピクセルが 1 つ含まれます。次に、バケットに対して行われたすべてのリクエストをログに記録する方法を設定するために、このバケットの前に HTTP ロードバランサを作成します。

  1. GCP Console で [負荷分散] ページに移動します。

    [負荷分散] ページを開く

  2. [ロードバランサを作成] をクリックします。

  3. [HTTP(S) 負荷分散] セクションで [設定を開始] をクリックします。

  4. Cloud Storage バケットのバックエンドを設定します。結果のグラフは次のようになります。バックエンド バケットの作成方法については、バックエンド バケットのドキュメントをご覧ください。

    バックエンドの構成

  5. 必要に応じてホストとパスを設定するか、基本構成のままにします。

  6. [作成] をクリックします。次のような環境になります。

    バケットの設定

ログの収集

Stackdriver Logging のエクスポートを使用してログを収集します。ここでは、データを BigQuery に直接エクスポートします。エクスポートを設定するには、ロギングデータを受け取るデータセットを作成し、エクスポート ルールを設定する必要があります。

BigQuery で受信データセットを作成する

  1. BigQuery に移動します。

    BigQuery を開く

  2. プロジェクト名の横にある矢印をクリックします。

  3. [新しいデータセットの作成] をクリックします。

  4. 名前として「gcs_pixel_tracking_analytics」を入力します。

エクスポートを設定する

  1. GCP Console の [エクスポート] ページに移動します。

    [エクスポート] ページを開く

  2. ロードバランサ用のフィルタを追加します。[YOUR_LB_NAME] はロードバランサの名前に置き換えます。

    resource.type = http_load_balancer AND resource.labels.url_map_name = "[YOUR_LB_NAME]"
    
  3. [エクスポートを作成] をクリックします。

  4. [シンク名] を入力します。

  5. [シンクサービス] リストで [BigQuery] を選択します。

  6. [シンクのエクスポート先] リストで、前のステップで作成したデータセットを選択します。

  7. [シンクを作成] をクリックします。

    シンクの作成

サンプルデータの作成

これでピクセルを提供できるようになりましたが、実際に動作するところを見るより勝るものはありません。もちろん、ピクセルは何千ものページビューを獲得しているサイトにはまだありません。BigQuery を使用して一部のトラフィックを分析し、これが大規模に機能する仕組みを理解するために、ピクセル URL に追加されたカスタム パラメータを使用してサンプルデータを作成できます。

これを行うには、Vegeta を利用できます。負荷テスト環境を設定するチュートリアルは GitHub にあります。負荷テストは、次のように URL パラメータにランダムな値を追加することによって、ピクセル URL にリクエストを送信します。

GET http://[YOUR_IP_ADDRESS]/pixel.png?[YOUR_PARAMETERS]

パラメータは次の例のようになります。

uid=19679&pn=checkout&purl=http%3A%2F%2Fexample.com%2Fpage&e=pl&pr=prod1;prod2:

上の例の各要素の内容は次のとおりです。

  • uid はアクセスしている顧客のユーザー ID です。
  • purl はアクセスしているページの URL です。
  • e はイベントです。
  • pr はその時点でショッピング カートに入っている商品のリストです。

ログの分析

BigQuery でデータを分析するにはさまざまな方法があります。このチュートリアルでは、BigQuery のウェブ UI を使ってログを分析します。

次のセクションでは、ピクセル トラッキングのシナリオでよく使用されるクエリを示します。

再来店回数上位 5 顧客

次のクエリでは、ユーザー ID(uid)と、ピクセルをホストする URL に対する各 ID のリクエスト数(c_uid)が一覧表示されます。結果は、回数が多い順に 5 件に制限されます。

SELECT
  count(REGEXP_EXTRACT(httpRequest.requestUrl, r"^.+uid=([0-9]*)")) as c_uid,
  REGEXP_EXTRACT(httpRequest.requestUrl, r"^.+uid=([0-9]*)") as uid
FROM
  `YOUR_PROJECT.YOUR_DATASET.request_*`
GROUP BY uid
ORDER BY c_uid DESC
LIMIT 5

結果は以下のとおりです。

バケットの設定

上位 5 商品

この例では、パラメータ文字列に pr=product1;product2;product3 が含まれています。次のクエリでは、BigQuery の配列を利用して、すべてのパブリッシャーでの各商品の出現回数をカウントしているため、どの商品が訪問者の興味を引いたかを調べることができます。

SELECT
  DATE(timestamp) day,
  product,
  count(product) c_prod
FROM
  `[PROJECT_ID].gcs_pixel_tracking_analytics.[TABLE_ID]`
CROSS JOIN UNNEST(SPLIT(REGEXP_EXTRACT(httpRequest.requestUrl, r"^.+pr=(.*)"), ";")) as product
GROUP By product, day
ORDER by c_prod desc

[PROJECT_ID][TABLE_ID] は適切な値に置き換えてください。

たとえば、データを変換して別の BigQuery のテーブルに保存し、Google データポータルを使用してダッシュボードを作成することで、追加の分析を行うことができます。

負荷テスト

設定の負荷テストに関心があるユーザーのために、カスタムメイドの URL のリストを含む GitHub リポジトリが用意されています。テストは 100,000 QPS に達しますが、さらに必要があれば、より多くの需要に対してテストを行うこともできます。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

プロジェクトを削除する

  1. GCP Console で [プロジェクト] ページに移動します。

    プロジェクト ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

リソースを個別に削除する

プロジェクト全体ではなく個々のリソースを削除する場合は、以下の手順に従ってください。

Cloud Storage バケットを削除する

  1. GCP Console で、Cloud Storage ブラウザに移動します。

    Cloud Storage ブラウザに移動

  2. 削除したいバケットの隣にあるチェックボックスをクリックします。
  3. ページの上部にある [削除] ボタンをクリックし、バケットを削除します。

BigQuery データセットを削除する

  1. BigQuery ウェブ UI を開きます。

    BigQuery を開く

  2. チュートリアルで作成した BigQuery データセットを選択します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...