fluent-plugin-bigqueryを使ってログをbigqueryに流してみる
About
ログをfluentdを通してbigqueryに投げるところを試してみました。今回は適当なログで試してますが、nginxのログとかをやってみたいところです!
事前準備
gcpのアカウントを作成
- projectを作成する
- サービスアカウントを発行する(今回はjson)
- datasetを作成する(データベースのようなもの)
設定
fluentdの設定
前提として下記のpluginが必要です。
chefを使っており、templateになっています。/etc/td-agent/conf.d
以下に配置します。
<source> @type tail format none path /var/log/messages tag os.messages pos_file /var/log/td-agent/os.messages.pos </source> <source> @type tail format none path /var/log/secure tag os.secure pos_file /var/log/td-agent/os.secure.pos </source> <match os.**> @type forest subtype copy <template> <store> @type bigquery method insert auth_method json_key json_key /etc/td-agent/<%= @json_key %> project <%= @bq_project_id %> dataset <%= @dataset %> flush_interval 1 buffer_chunk_records_limit 1000 buffer_queue_limit 1024 num_threads 16 auto_create_table true table <%= @table_name %>_%Y_%m time_format %s time_field time schema_path /etc/td-agent/os.test.schema field_integer time </store> </template> </match>
- 鍵の指定はp12でもよいのですが、今回はjsonにしました。深い理由はないですが、こちらの方が簡単な気がしました。
auto_create_table
を設定しているため、勝手にtableが作成されます(初回ログ送信時にtableが作成されます)。今回のように<%= @table_name %>_%Y_%m
としておけば月毎のログを管理できそうです。- tableにどんな形式でデータを投入するか指定を
schema_path
でしています。
2016/02/01追記
- 上記のsource設定では下記のschemaを指定してもデータがnullになってしまいます。tailではmessageという名前でデータが入った覚えがありますので、"name": "message" とするとデータが入るはずです(未検証)
[ { "name": "json", "type": "STRING" } ]
このデータに入れるには下記のようにログを送信すればよいです。
$ echo'{"json": "message"}' | fluent-cat os.test
まとめ
なんとなく使い方が分かりました!