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



