fluentdでBigQueryにログを送る設定とハマった時のTips
fluentd触ったことなかったので所々ハマってしまったのと、ハマった時こうデバッグしましたみたいのをメモにしておく。 にしてもfluentdよくできてると思った。 fluentdのイベントサイクルに関してはこのDocがとにかくわかりやすい
fluentdを起動して設定ファイルがあっているかとか、必要なプラグインがインストールされているかとかは一旦実行してみるといい。
$ fluentd -c fluent.conf
ハマりポイントを回避する1つの手段として、急に設定ファイルを頑張って書き始めないことだと思った。この記事でいうと「fluentdでBigqueryにログを投げる」という設定になるんですが、まずは導通テストをするのをオススメする。
fluentdは、sourceで指定したデータソースからmatchしたものを設定ファイルに基づいて出力するものなので、例えばこんな感じ。
インフラエンジニアとかにとっては当たり前なのかもしれない。アプリケーションエンジニアでいうところの、puts 'hogehoge'
だろうなと思った。
<source> type forward port 24224 </source> <match **> type stdout </match>
24224ポートで受け取ったログソースで、**
(正規表現でいうところの全て)をstdout(標準出力)するものなので、少なくともアプリケーション側でログを投げるようにしてfluentdを起動すれば受け取るログ全てを出力することになる。ここで、何もログが測れないのであれば何がおかしいかの調査のスコープを狭くできるのでおすすめ。
fluentd -> Bigquery
fluentd -> Bigqueryに関してはgemがあってこちらを使用させてもらった。
documentationも充実して素晴らしいOSSです。 サーバー側でgemをインストール
$ fluent-gem install fluent-plugin-bigquery
ストリーミングインサートするならばこんな感じで素直に動く。
<match dummy> @type bigquery_insert auth_method json_key json_key { "private_key": "private_key_from_gcp_account", "client_email":"email from gcp account" } project yourproject_id dataset yourdataset_id table tablename schema [ {"name": "time", "type": "INTEGER"}, {"name": "status", "type": "INTEGER"}, {"name": "bytes", "type": "INTEGER"}, {"name": "vhost", "type": "STRING"}, {"name": "path", "type": "STRING"}, {"name": "method", "type": "STRING"}, {"name": "protocol", "type": "STRING"}, {"name": "agent", "type": "STRING"}, {"name": "referer", "type": "STRING"}, {"name": "remote", "type": "RECORD", "fields": [ {"name": "host", "type": "STRING"}, {"name": "ip", "type": "STRING"}, {"name": "user", "type": "STRING"} ]}, {"name": "requesttime", "type": "FLOAT"}, {"name": "bot_access", "type": "BOOLEAN"}, {"name": "loginsession", "type": "BOOLEAN"} ] </match>
schemaに存在しないカラムがあったりするとBigQueryではエラーになるので、どういうログを扱うかにもよるかもしれないですが、ignore_unknown_values
のオプションはtrueにすると良さそうだった。
References
fluentdの学習に以下のドキュメント、記事が本当に勉強になりました。素晴らしい記事を公開していただいていることに感謝しています。
Fluentdを使うアプリケーションの導通テストにstdoutプラグインを使う。 | 三度の飯とエレクトロン
Life of a Fluentd event - Fluentd
Fluentd と BigQuery を使用したリアルタイム ログ分析 | ソリューション | Google Cloud