LoginSignup
19
16

More than 5 years have passed since last update.

GCSに自動で保管させたGAEのログをBigQueryにロードする方法

Last updated at Posted at 2015-04-03

GAEのログは自動でGAE内に保管されますが、デフォルトの設定では1GB or 90日間のどちらかの条件に達すると、古いデータから削除されてしまいます。その為、ログを永続的に保管するには、外部サービスに保管する必要が有ります。

GAEはオプションで、以下の2つのサービスに自動でログをエクスポートし保管させることができます。
・BigQuery
・GCS

やり方は簡単で、Google Developers Consoleから対象のプロジェクトを選択し「Monitoring」->「Logs」->「Exports」と進みます。
BigQueryに保管させる場合は、既存or新規のデータセットを選択して、「Stream App Engine Logs to BigQuery」にチェックを入れます。
GCSに保管させる場合は、既存or新規のバケットを選択して、「Save App Engine Logs to Cloud Storage」にチェックを入れます。
最後に「Done」をクリックすれば設定完了です。
スクリーンショット 2015-04-03 19.10.38.png

直接BigQueryに保管させることもできますが、ストレージ費用やログ保管単位(BigQueryは1日単位、GCSは1時間単位)の違いなどで、GCSに保管させる方が良い場合もあります。
この記事では、GCSに自動でエクスポートし保管させたGAEのログをBigQueryにロードする方法を記載します。

1.データセットの作成

BigQueryのトップページにて、データセットを作成します。
スクリーンショット 2015-04-03 17.32.59.png

2.テーブルの作成及びインポート

先ほど作成したデータセットを選択し、テーブルの作成を行います。ウィザードに従って以下の通り進めます。

1.「Table ID」にはデータセット内にてユニークなテーブルIDを入力します。

スクリーンショット 2015-04-03 17.35.22.png

2.「Source Format」は「JSON」を選択します。「Load data from」は「Google Cloud Strage」を選択し、GCSに自動エクスポートされたGAEのログのフルパス(gs://~)を入力します。

スクリーンショット 2015-04-03 17.36.43.png

3.「Schema」には、以下のJSONファイルの中身を全部をコピーし、貼り付けます。

https://gist.github.com/yang36/46a9f3332d057e785edd
スクリーンショット 2015-04-03 17.38.21.png

4.最後の画面で「Ignore unknown values」にチェックを入れ、「submit」をクリックします。

スクリーンショット 2015-04-03 17.39.00.png

※チェックを入れることにより、BigQueryのテーブルスキーマに定義されていない値は無視(破棄)されます。現状、いくつかの値はプログラム等による加工を行わない限り、そのままBigQueryに格納することはできません。
 また、GAEの設定により、出力される値が微妙に変化することも確認されています。全てのログを保管させたい場合は、GAEから直接BigQueryにエクスポートし保管させる方法を推奨します。

3.無視(破棄)されるデータについて

以下のようなデータが無視(破棄)されます。
"appengine.googleapis.com/module_id": "default",
"appengine.googleapis.com/version_id": "20150324a",
"appengine.googleapis.com/clone_id": "00c61b117c3335a4c278e4a25bd43eb92ba2cf40"
"@type": "type.googleapis.com/apphosting.RequestLog"
これらのデータを無視(破棄)しなければならない理由は、BigQueryのテーブルスキーマの列名に、アンダースコア(_)以外の記号が使用できない為です。

4.ちなみに

GAEのログをGCSに保管させるのとBigQueryに保管させるのと、どちらが費用的に安くなるのでしょうか?
以下の公式ドキュメントを見る限りGCS(Nearline Storage)に保管したほうが安く見えます。

https://cloud.google.com/storage/pricing#storage-pricing
https://cloud.google.com/bigquery/pricing#storage

しかし、BigQueryに保管したほうが、ストレージサイズは小さくなります!(不要なJSON形式が省かれ、生データのみ格納されるため)
その為、実際のプロジェクト内容によって、どちらが安くなるかは変動すると思われます。

19
16
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
16