GoogleがCloud Platformの一貫として提供するBigQueryというサービス。データウェアハウスともビッグデータ解析ツールとも言われていますが、今回は「サービスのデバグに便利」ということをガチの実話を交えて話してみましょう。
BigQueryざっくり紹介
BigQueryはの機能をわかりやすく言うならば
億超えるようなレコードへの雑クエリでも10秒程度で結果を返してくれる便利なカラム型データベース
と表現出来るでしょう。特徴として以下があげられます。
- 事前に簡単なスキーマ定義を行う
- CSVやストリーミングでデータ挿入
- 特化したSQLで
SELECT
文を発行 - 更新系はSQL使って叩けない
- リアルタイムで情報を取ってくるためのデータストアには向かない
- 重たいクエリを大量に実行しなければ... 安い
Amazon Web ServicesだとRedShift
が対応するサービスなのですが、カジュアルに使える意味でBigQueryを選んでます。
アクセスログ+αを流し込む
僕が開発しているBoketeでは、Webやモバイルアプリ含む全てのサービスは必ず「JSONRPCで実装されたWebAPI」を参照することにしています。このアーキテクチャ云々に関しては、なかなか上手くいっていて、詳しく書きたいところですが、また次の機会に。
で、このアーキテクチャですと、WebAPIのアクセスを見ればクライアントソフトウェア、しいては「ユーザー」の行動を把握することにつながります。そこで僕らはBigQuery事始めとしてApache Common Log
相当の情報にアプリケーション固有の簡単なユーザー情報を付加し、BigQueryにストリーミングで逐一流し込んでいます。実装を簡単の流れを説明すると
- WebAPIアプリがJSON形式のログファイルをローカルストレージに書き出す
- 上記アプリと同じホストで動かしている
fluentd
がログをtail
して集約サーバに投げる - 集約サーバの
fluentd
がそれを受け止めBigQueryに投げるpluginを使ってデータ挿入
という具合です。
バグの原因追求の事例
さて本題。最近あった事例で、バグの原因追求にBigQueryが役に立った件を紹介します。
一部のとある状況下、具体的に言うと、モバイルアプリの「とあるOSのとあるバージョン」で不具合が生じていました。その場合
他の環境だと動くからネイティブクライアントのバグだよね〜
と、その責任を、アプリ担当である陳さんにある時期まで委ねてたのですが、どうも解決しないらしい。ただ問題は「認証周り」で起こっている可能性が高い。そこで、一度、BigQueryの管理画面からクエリを発行。ユーザーの動向を見るとやはり「特定のOSかつバージョン」でバグってることがすぐにわかりました。
ただ、これだけだと原因追求としては甘いので、急いでBigQueryのスキーマとアプリのコードを一部を変更し、今まで取れてなかった、認証用のToken
もログギングしてみました。そして上記した通り、バグを踏んでいるようなユーザーのToken
一覧を取得。よくよくDBと照らし合わせると「そのToken
存在しないじゃん!」ってことになりまして「ここか〜」という具合。急いで、陳さんに連絡して「有効期限の切れたToken
のリフレッシュ処理」がうまくいっているかどうか?を確認したところ「そのバージョンのみ」諸々の事情で出来てなかったことが判明。これでバグの解消につながったのです。
まとめ
このように、BigQueryは雑にデータ放り込んでおいても、あとあとの「ログ追い」が非常に楽です。SQLで条件が指定できるし、多量のレコードあろうとも10秒前後で結果は返ってくる。さらにはSQLを書けるConsoleがついてくるのでお手軽です。便利に漁れるログの保全庫としてBigQueryを使うのもありでしょう。また、こうした用途の他にも、ちょうど今、TableauやBIMEなどのBIツールと連動させたデータ分析を試しているところなので、楽しいです!
PS.
そいや、現在、Amazon Web Servicesさんがpowered byなCTO Night&Dayというイベントに来ています...
- 作者: Jordan Tigani,Siddartha Naidu,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/03/23
- メディア: 大型本
- この商品を含むブログを見る
Google BigQueryではじめる自前ビッグデータ処理入門
- 作者: 清野克行
- 出版社/メーカー: 秀和システム
- 発売日: 2014/09/30
- メディア: 単行本
- この商品を含むブログ (3件) を見る