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. 最速で理解したい人のためのIT用語集

関連記事

  1. Adobe Analytics

    Adobe Analytics: データフィードをBigQueryで集計する

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

  2. Google Analytics

    Google Analytics: ユニバーサルアナリティクスの拡張Eコマース用dataLayerを…

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

  3. Ad Hoc Analysis

    Adobe Analytics: Ad Hoc Analysisでセグメントの条件を一気に追加する方…

    Adobe Analyticsでセグメントを作るとき、「A または B…

  4. Google Cloud Platform

    GoogleNext 2019レポート:初日目

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

  5. Looker

    Looker: 公開されているLookML Blockをクローンして使う方法

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

  6. Adobe Analytics

    Adobe AnalyticsのDatafeedをBigQueryのColumn-based Tim…

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

最近の記事

  1. Snowflakeとは?Data Cloud World T…
  2. SnowflakeのData Clean Roomを基礎から…
  3. SnowflakeのData Clean Roomを基礎から…
  4. SnowflakeのData Clean Roomを基礎から…
  5. SnowflakeのData Clean Roomを基礎から…
  1. Amazon Web Services

    セキュリティグループ vs ネットワークACL
  2. Google Analytics

    【UA完全終了】GA4移行作業は完了しましたか?2023 年 7 月にユニバーサ…
  3. IT用語集

    CRM(Customer Relationship Management)って何…
  4. Adobe Analytics

    Adobe Analytics: データフィードをBigQueryで集計する
  5. Mouseflow

    Mouseflow vs Hotjar:どちらを選ぶべき?
PAGE TOP