GAEのログをBigQueryに連携する

この記事は約4分で読めます。

BigQueryuについて簡単なご紹介を。

言わずとしれたGCPの人気サービスです。

AWSで言えばAthenaでしょうか?Azureはよく分かりません、、、

最大のメリットは、

  • 安い(特にデータの保管料が)
  • 処理が超高速(事例等検索頂ければ結構引っかかりますが、ここでは割愛します)

だと思います。

AWSやAzureなどと連携し利用されるほど人気があるようです。

スポンサーリンク

今回やること

エラー情報や不正アクセスの分析はサイト運営を行う上で定期的にやるべきことですので、当ブログが稼動しているGAEのログをBigQueryに連携してみます。

GAEですが標準でGCPのLoggingにログを出力しているのでLoggingのログデータをBigQueryに連携するだけになります。

※GCEインスタンスの場合はログエージェントを仕込まないとLoggingにログ出力してくれません。

スポンサーリンク

料金

以下公式 Docより。

料金  |  BigQuery: Cloud Data Warehouse  |  Google Cloud
BigQuery の料金を確認する
無料トライアルおよび無料枠のサービスとプロダクト
0 分の無料クレジットと、月々の上限まで無料で利用できる Compute Engine や Cloud Storage などの 20 種類以上のプロダクトを活用して Google Cloud で構築を開始しましょう。

月内の無料枠の条件

  • 1TBバイトのクエリ
  • 10GBバイトのストレージ

を満たせば、費用は発生しなさそうです。

個人利用の予算でも問題なさそうです。

ただし、この手のサービスは実行クエリで指定したデータの検索範囲が料金に直結します。

不適切な検索条件を指定すると数十万、数百万規模の課金が発生しますので十分ご注意下さい。

スポンサーリンク

設定手順

設定手順は公式Docを参考にしました。

※手順を共有して下さったウチの会社のRさん、大感謝です。

サポートされている宛先にログをルーティングする  |  Cloud Logging  |  Google Cloud

CloudConsolメニューより「Logging」->「ログルーター」を選択します。

次にログルーター画面で「シンクの作成」をクリックします。

※最初に試した時「シンクの作成」リンクが非アクティブでした。適当にCloudStrageでバゲットを作成した後、ログルーター画面に戻ると「シンクの作成」リンクがアクティブになりました。ご参考までに。

ログ画面が表示され、画面右にシンクの編集項目が表示されます。

  • シンク名は任意の名前を入力します
  • シンクサービスは「BigQuery」を選択します(他はCloudStrage,Pub/Sub_独自のサービスが選択出来ます)
  • 分割テーブルを使用のチェックをOnにします。BigQueryのテーブル内部で日別単位でHive化してくれるようです。詳細はこちらの記事を参照して下さい。
  • シンクのエクスポート先は「新しいBigQueryデータセットを作成」を選択します。

データセット名を入力し「作成」をクリックします。

「シンクを作成」をクリックします。

上記設定が上手く動いているかBigQueryで確認します。

コンソールからBigQueryの画面を開いてみます。

データセットとテーブルが作成され、テーブル内にGAEのログデータが出力されていました。

※同期は1時間ごとに行われるようなので、シンク作成直後はデータセットしか作成されていない状態となります。暫く時間を置いてから確認をしてみて下さい。

詳細画面からテーブルの有効期限という設定項目があるので、長期データの分析を行わないのであれば費用節約の面から、適切な有効期限を設定した方がいいと思います。

今回はGAEのログ分析なので有効期限は30〜90日程度でいいかなと思ってます。

ただこの設定、テーブルが消えるような気がしてなりません。

実運用で検証してみます。

スポンサーリンク

まとめ

AWSで当ブログを運用していた時、AWS WAFのログをAthenaに連携するという同じような事をやっていたんですが、

  • ログファイルをFirehouse経由でS3に格納
  • 格納されたログファイルをLambdaで年月日単位でHive化
  • Athenaに取込

といった手間かける必要がありましたが、GCPではLoggingにログが入ってさえいればこれらを簡略出来る点便利だと思いました。

今後SQL叩いたり、ダッシュボート系のサービスで視覚化したりとかやってみようと思いますので、別の記事でご紹介出来たらと思います。