これでAppEngineのアクセスをBigQuery基盤でビッグデータ解析してます!と言えますw
STEP0: 事前準備
前回のエントリでBigQueryとAppEngineが連携できている事を前提とします。
STEP1: AppEngineのログを取得する
AppEngine(Python)のLogServiceを使ってリクエストログを抜き取り、BigQuery Stream APIで直接BigQueryにデータを流し込みます。
import time from google.appengine.api import memcache from google.appengine.api.logservice import logservice import httplib2 from apiclient import discovery from oauth2client import appengine PROJECT_ID = 'my-project' SCOPE = 'https://www.googleapis.com/auth/bigquery' LAST_TIME = 'last_time' start_time = memcache.get(LAST_TIME) end_time = time.time() body = [] for log in logservice.fetch(start_time=start_time, end_time=end_time, offset=None, minimum_log_level=logservice.LOG_LEVEL_INFO, include_incomplete=True, include_app_logs=True): acc = {} acc['ip'] = log.ip acc['method'] = log.method acc['user_agent'] = log.user_agent # add info you need body.append( {'json':acc} ) credentials = appengine.AppAssertionCredentials(scope=SCOPE) http = credentials.authorize(httplib2.Http(memcache)) bigquery = discovery.build('bigquery', 'v2', http=http) response = bigquery.tabledata().insertAll(projectId=PROJECT_ID, datasetId='AppEngine', tableId='MyTable', body=body).execute() memcache.set(LAST_TIME, end_time, time=3600)
これで完了。logserviceに関してReferenceを参照するとどういう情報が取得できるのかが分かりますので、必要なデータをBigQueryに流し込むと良いと思います。
start_timeとend_timeは指定しておくと、重複なくアクセスログを回収できると思います。