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、ネットワークがあるが。