GCP Advent Calendar 12/20のエントリ記事になります。LB + Autoscalerを書こうとしましたが、詳細に解説しているページがありましたので、HPCの基盤技術としてつけるBigQueryについて書きます。LB+AutoScalerについては以下で詳細にか書かれています。
http://qiita.com/soundTricker/items/951a02266a5c95165863
nginxのアクセスログの出力項目を変更します。time、hostがBigQueryのスキーマの項目に一致します。
log_format ltsv 'time:$time_iso8601\t'
'host:$remote_addr\t'
'uri:$request_uri\t'
'method:$request_method\t'
'forwardfor:$http_x_forwarded_for\t'
'request:$request\t'
'status:$status\t'
'size:$body_bytes_sent\t'
'referer:$http_referer\t'
'ua:$http_user_agent\t'
'reqtime:$request_time\t'
'upsttime:$upstream_response_time\t'
APIと認証→認証情報から、新しいクライアントIDを作成します。*.p12用のパスフレーズも表示されますので、控えておきます。下記作業では使用しませんが。
作成後、*.p12ファイルが作成されますので、サーバーの/etc/td-agentにアップロードします。
Fluentd pluginを導入します。
/usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-bigquery
/usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-forest
BigQuery用スキーマファイルを作成します。
[
{ "name": "time", "type": "timestamp" },
{ "name": "size", "type": "integer" },
{ "name": "reqsize", "type": "integer" },
{ "name": "status", "type": "integer" },
{ "name": "host", "type": "string" },
{ "name": "uri", "type": "string" },
{ "name": "method", "type": "string" },
{ "name": "ua", "type": "string" },
{ "name": "vhost", "type": "string" },
{ "name": "reqtime", "type": "float" },
{ "name": "apptime", "type": "float"}
]
作成したスキーマファイルを使って、スキーマを作成します。
bq mk -t project_id:nginx_datasheet.access_log schema.json
S3にログを転送しつつ、BigQueryに送信するために、fluent-plugin-forestプラグインを使っています。
type tail
path /var/log/nginx/totalsolution.biz.access.log
format ltsv
time_key time_local
time_format %d/%b/%Y:%T %z
pos_file /var/tmp/nginx_access_log.pos
tag nginx.access
# Output
type forest
subtype copy
type s3
s3_bucket XXXXXXXXXXXXXXXXXXX
s3_region ap-northeast-1
s3_object_key_format %{path}%{time_slice}_%{index}.%{file_extension}
path logs/
buffer_path /var/log/fluent/
time_slice_format %Y/%m/%d/
flush_interval 10m
utc
type bigquery
method insert
auth_method private_key
email XXXXXXXXXXXXXXXX@developer.gserviceacco
unt.com
private_key_path /etc/td-agent/my-cloud-environment-879d7473d230.p12
project skillful-fx-531
dataset nginx_datasheet
table access_log
buffer_chunk_records_limit 500
buffer_chunk_limit 1000000
buffer_queue_limit 5000
flush_interval 1
try_flush_interval 0.05
num_threads 4
queued_chunk_flush_interval 0.01
time_format %s
time_field time
schema_path /etc/td-agent/schema.json
| Google BigQuery | 機能 | Redshift |
| 95円/月 Wikipedia3億行 |
価格 | \90,000 |
| 可 | ストリーミング | 不可 |
| Tableau | BI | Tableau |
価格的にGoogle BigQueryが優位な結果に。
時たま500エラーがでるようだが。
tabledata.insertAll API project_id="skillful-fx-531" dataset="nginx_datasheet" table="access_log" code=500 message="Unexpected. Please try again."
[warn]: retry succeeded. instance=70122832844240
確かに、サーバーエラー(500)が起きている。考えられることはBigQueryのLimit、ネットワークがあるが。


