Adobe Analytics

Adobe AnaltyicsとGoogle Analytics の「生Webビーコン」をBigQueryに保存してLookerで分析 (その1)

こんにちは、エクスチュアの権泳東(コン・ヨンドン)です。

今回はAdobe AnalyticsとGoogle AnalyticsのJSライブラリが送信するWebビーコンデータを加工無しで「生のまま」BigQueryに保存する、トリッキーなネタです。

Webビーコンを横取りする

例えば弊社公式サイトではAdobe Analyticsに対してこういうWebビーコンが送信されてます。

exture.d1.sc.omtrdc.net/b/ss/exture/1/JS-1.7.0-D7QN/s?AQB=1&ndh=1&pf=1&ce=UTF-8&cdp=2&pageName=ext:index.html&g=https://www.ex-ture.com(以下略

そしてGoogle AnalyticsにはこういうWebビーコンが送信されてます。

www.google-analytics.com/r/collect?v=1&_v=j72&t=pageview&_s=1&dl=https://www.ex-ture.com/&ul=ja-jp&de=UTF-8&dt=エクスチュア株式会社...(以下略

いずれもこれらのリクエストをWebビーコンやらサーバーコール、ピクセルなどと呼びますが、このパラメータ「文字列」をそのまま記録しておきたいと思った次第。
これらの生データをBigQueryに記録して、ほぼ生のログを見れるようにする、というのが目的です。

Adobe AnalyticsのWebビーコンURLをconsoleに出力する

AAにデータが送信されるたびに、AppMeasurement 1.7ではs.kbという変数にリクエストURLが入ります。
※AppMeasurement 2.4 ではs.rbでした。デベロッパーコンソールでwindow.sの中身を見れば分かります。
このs.kbをconsole.logで表示するとこうなります。

console.log(s.kb)

Google AnalyticsのWebビーコンURLをconsoleに出力する

sendHitTaskの中でhitPayloadという値を呼び出すとリクエストURLパラメータを取り出すことが出来ます。
GTMでやるならこうです。

まずは下記のJavascriptを使って、hitPayload という名前のカスタムJavascript変数を作成します。

名前: hitPayload
中身:

function() {
  return function(model) {
    console.log(model.get('hitPayload'));
  }
}

そしてGAユニバーサルアナリティクスのタグに、sendHitTaskというフィールドを追加して、そこで先程作った{{hitPayload}}変数をセットします。
sendHitTaskというフィールドはこの記事を書いてる時点でGTMの選択肢には出て来ませんが、気にせず打ち込んでください。

[Googleアナリティクス設定変数]を使っている場合は、そこでフィールドを追加設定出来ます。
個別のタグに設定したい場合は、各タグの[このタグでオーバーライド設定を有効にする]項目にチェックをいれて、設定を追加出来ます。

詳細設定 > 設定するフィールド
フィールドの名前: sendHitTask
値: {{hitPayload}}

sendHitTaskフィールドを追加

プレビューモードでコンソール出力を確認すると、GAのWebビーコンURLが表示されます。

hitPayloadが表示される

さて、コンソールにWebビーコンURLを表示出来たということは、あとはこれを横取りして、BigQueryに記録するための仕組みを作れば良い訳です。
以前、Adobe Analyticsに入り切らないデータをBigQueryに投入する というブログ記事を書いた時にやったのと同じ仕組みで、JSでビーコン飛ばす -> GAE -> PubSub -> Dataflow -> BigQuery という流れにします。
そして、ログ取るだけではつまらないので、データプラットフォームのLookerにつないでグラフ化するところまでやります。

GCPで生ビーコンログ保存環境を作る

 
以下、GCPで環境を作っていきます。
 

1. Pub/Subのトピックを作成

計測データがWebページから連続的に送られてくるので、Pub/Subでバッファさせます。
今回は beacon という名前でトピックを作成しました。

2. AppEngineでビーコンサーバーを作成

ビーコンを受け取るためのサーバーをGAEで作ります。
毎度おなじみのGAE Standard環境のNode.jsでやります。

ソースコードはここに置いておきます。

これまたテキトーに解説すると、横取りしたAAとGAのWebビーコンデータを受け取って、タイムスタンプ+日付とともにPub/SubにJSONで渡すだけです。

3. BigQueryにテーブルを作成

データを格納するテーブルを作成します。
TIMESTAMP型のhit_timeカラムを使って日付分割パーティションテーブルとして作成しておきます。

日付分割パーティションテーブルを作成

4. Dataflowでパイプラインを作成

Pub/SubでバッファしたデータをBigQueryに投入するためのパイプラインをDataflowで作成します。

Dataflowを使うにあたって、tmpデータ書き込み用のGCSが必要です。
GCSでバケットを作るか、または既存のバケットにフォルダを作成して、それをtmpデータ用にします。

そして今回はDataflowのデフォルトテンプレートである[Pub/Sub to BigQuery]テンプレートを使います。
Dataflowの作成からテンプレートを選んで、上記で作成してPub/Subのトピックと、BigQueryテーブル、GCSバケットを入力するだけでパイプラインを作成出来ます。

Dataflowテンプレートからジョブを作成

5. ビーコン送信用のJSを作成

そして最後に横取りしたWebビーコンデータを送信するためのJSを作成します。

Adobe Analytics用

AA用のソースコードはこちら
このJSファイルをタグマネージャーやAppMeasurement.jsファイル内に設置するだけでOKです。

Google Analytics用

GA用のソースコードはこちら
このJSファイルを先程説明したGTMのhitPayload変数の中身と置き換えます。

さて、タグマネージャーを本番発行したらBigQueryの中を覗いてみましょう。

BigQueryに生WebビーコンURLが記録されます

続々とデータがストリーミングインサートされて来ます。

さて、今回はここまで。
次回は、生ログを見やすく加工した上で、Lookerでグラフ化します。

続きはこちら

弊社では各MarTech(マーテック)製品の導入支援や、Google Cloud Platformを使ったデータ分析基盤構築を主に行っております。
お問い合わせはこちらからどうぞ

ブログへの記事リクエストはこちらまで

関連記事

  1. Google Analytics

    Google Tag Manager上でGoogle AnalyticsのclientIDを取得する…

    2018/4/20追記:この記事の内容は古いので、下記の新しい記事…

  2. Adobe Analytics

    Adobe Analytics: RSIDを間違えてしまったデータを正しいRSに入れ直す

    こんにちは、エクスチュアCTOの権です。今回はAdobe An…

  3. Adobe Analytics

    Azure DatabricksでAdobe AnalyticsのDatafeedを分析する

    こんにちは、エクスチュアの権泳東(コン・ヨンドン)です。今回はAz…

  4. Adobe Analytics

    Adobe Analytics: Legacy s_code.jsからAppMeasurement.…

    こんにちは、エクスチュアCTOの権です。今まで個人ブログで技術メモ…

  5. Google Cloud Platform

    Looker: LookerbotをGoogle Cloud Platformで動かす

    こんにちは、エクスチュアの権泳東(コン・ヨンドン)です。今回は…

  6. Adobe Analytics

    Adobe Analytics: BigQuery+Lookerでアトリビューション分析

    こんにちは、エクスチュアの権泳東(コン・ヨンドン)です。今回はAd…

最近の記事

  1. Databricks: Delta Lakeを使ってみる
  2. Adobe Analytics:計算指標でevents変数を…
  3. Databricks: Spark DataFramesをJ…
  4. Databricks: Spark RDDで使う主なメソッド…
  5. GCPのBQMLを使ってKaggleコンペに挑んでみた(その…
  1. Adobe Analytics

    Adobe Analytics + Google BigQueryでよく使うSQ…
  2. Adobe Analytics

    Looker: Sankey Diagramを使ってサイト内フローを可視化する
  3. Adobe Analytics

    Adobe Analytics: BigQueryにロードしたデータフィードをD…
  4. Adobe Analytics

    AdobeAnalytics: GTMのdataLayerをAdobeAnaly…
  5. Google Analytics

    Google Analytics: アプリSDKのclientIDを取得する
PAGE TOP