case-kの備忘録

日々の備忘録です。データ分析とか基盤系に興味あります。

技術調査メモ:Firebase / Google Analytics ログ収集調査_20200911

FirebaseやGoogle Analyticsのログ収集を検討するにあたり調査した内容となります。

Firebase for Google Analyticsのログ収集

Firebase To BigQuery

Firebase からBigQueryにリアルタイムでExport可能。Cloud Pub/SubにはExportできない。

Firebase からBigQueryにExportした場合の制限としてはPub/SubとDataflowを介していないのでウィンドウ処理や重複排除、スキーマの変換、オンライン予測ができない。

スキーマ変換ができないので個人情報がある場合、BigQueryのポリシータグ によるカラム制御を使うことができないため、重複排除や個人情報をマスクするビューを作る必要がある。

>アプローチ 1: AI Platform オンライン予測を使用した Dataflow

https://cloud.google.com/solutions/comparing-ml-model-predictions-using-cloud-dataflow-pipelines?hl=ja#streaming-approach-1-cloud-dataflow-with-cloud-ml-engine-online-prediction

>Raw Events Export in BigQuery
https://towardsdatascience.com/firebase-event-analytics-with-google-bigquery-ec756230f768

Firebase のデータ遅延
Firebaseは最大で1時間ほどデータの遅延が発生する可能性がある。リアルタイムエクスポートに関する記載もあるが、Firebaseサーバ到着までの時間は考慮してない。

>Client-to-server latency、

>Firebase Analytics doesn't constantly stream down data from the client device. That would be a serious battery drain, and we want to be respectful of your users' battery life. Instead, analytics data is batched up and sent down when the client library sees that there's any local data >that's an hour old.

https://firebase.googleblog.com/2016/11/how-long-does-it-take-for-my-firebase-analytics-data-to-show-up.html

https://stackoverflow.com/questions/61673581/how-long-will-firebase-analytics-data-be-exported-to-bigquery

>So starting this week, we're happy to announce that you will now be able to see your Firebase Analytics data in BigQuery in near real-time!

https://firebase.googleblog.com/2016/08/real-time-exporting-of-analytics-data-into-bigquery.html

Firebase To Pub/Sub

Cloud Functionsを使うことでFirebase for Google AnalyticsのコンバージョンイベントをトリガーにPub/SubやCloud Logging経由でExportはできる。

Cloud Functionsの制限として、コンバージョンイベントは30個が上限。またiOS/AndroidのみでWEBについては検知できない。

>現在、Cloud Functions では、コンバージョン イベントとしてマークされた iOSAndroid のイベントのみがサポートされています。ウェブ コンバージョン イベントは現在利用できません。コンバージョン イベントは、Firebase コンソールの [アナリティクス] ペインの [イベント] タブで指定できます。

https://firebase.google.com/docs/functions/analytics-events?hl=ja

>アナリティクスがデフォルトで定義している 5 種類のイベントに加え、プロジェクトあたり最大 30 種類のイベントをコンバージョンとして有効化できます。

https://support.google.com/firebase/answer/6317518?hl=ja

所感 : Firebase for Google Analytics
Pub/SubとDataflowを介した方が良いが現状BigQueryにしかExportできないので、基本はBigQueryに対してExportし、参照用のビューを作るのが良さそう。

Dataflowを使いたい場合はCloud Functionsを使うのが良さそう(ただしウェブは対応していない。Firebaseは1時間ほどデータの遅延するかもしれないので検証と要件の確認が必要。

Google Analyticsのログ収集

Google Analytics To BigQuery

GAの有料版を使う方法とReporting APIを使う方法がある。GAの有料版を使う場合は毎月130万円+1GBあたり0.05ドルの費用がかかる。

遅延時間は数分程度。BigQuery以外に出力することはできない。

1 つの BigQuery プロジェクトにリンクする Google アナリティクス レポートビューの数は 300 個以内。300 個を超えると、エクスポートする 1 日分のデータの品質が低下する。

> BigQuery ストリーミング エクスポートでは、BigQuery Export を介して当日の最新のデータを数分以内に入手できます。

https://support.google.com/analytics/answer/7430726?hl=ja

>ストリーミング エクスポートを使用すると、データ 1 GB あたり 0.05 ドルの追加費用が発生します。

https://support.google.com/analytics/answer/7430726?hl=ja

>Googleマーケティング プラットフォームの中のメイン機能である「Googleアナリティクス 360」単体の利用料金は、月間10億ヒットまでは一律130万円となっています。

https://wacul-ai.com/blog/access-analysis/google-analytics-method/google-analytics-360/

>1 つの BigQuery プロジェクトにリンクする Google アナリティクス レポートビューの数は 300 個以内にすることを強くおすすめします。300 個を超えると、エクスポートする 1 日分のデータの品質が低下する場合があります。

https://support.google.com/analytics/answer/3416092?hl=ja

Google Analytics To Pub/Sub

Google アナリティクスのReporting APIを定期的に呼ぶことで取得できる。Reporting APIは1 日 10,000 件の制限があるので取得頻度を考慮する必要あり。

https://cloud.google.com/blog/ja/products/identity-security/centralize-cloud-identity-logs-behind-a-single-pane-of-glass

>ビュー(旧プロファイル)あたり 10,000 件が API リクエストの割り当ての上限であり、それ以上は許可されません。

>Real Time Reporting API のリクエストについては、最大でどのくらいの割り当てを確保できますか?プロジェクトごとの 1 日あたりのリクエスト数は 50,000 件まで、IP アドレスあたりの QPS(1 秒あたりのクエリ数)は 10 件までとなっています。

https://developers.google.com/analytics/devguides/reporting/core/v4/api-quota-faqs?hl=ja

https://developers.google.com/analytics/devguides/reporting/core/v3?hl=ja

所感 : Google Analytics
有料版を使ってないならReporting APIを活用した費用面では良さそう。確認したところすでに有料版を使ってるようなので、Google AnalytticsからBigQueryへ直接エクスポートする方法で良さそう。

その場合、Dataflowを介して何かしたい場合はBigQueryへインサートされたデータを参照するしかない。