tagから出力先ディレクトリを制御するout_tag_fileというfluentプラグインを作った
taka84u9/fluent-plugin-tagfile · GitHub
fluentの組み込みのout_fileプラグインを拡張してout_tag_fileというプラグインを作りました。
インストール
gem install fluent-plugin-tagfile
何故作ったか、out_fileの何が不満だったか
out_fileは次のように設定すると
<match apache.**> type file path /var/log/fluent/apache </match>
apacheで始まるあらゆるeventsをひとまとめにして次のようなログファイルを出力します。
/var/log/fluent/apache.20120201.aseoiwaefjpa.log
ここで、例えばapache.accessとapache.errorを送った場合、ここで出力されたファイルは両方を含んでいます。
もし、二つ別々のファイルにしたければ、各行のtagを見て分離する必要があります。
次のように二つのmatchを書くことで、fluentに別々のファイルに出力させることができます。
<match apache.access.**> type file path /var/log/fluent/apache/access </match> <match apache.error.**> type file path /var/log/fluent/apache/error </match>
が、もしもっともっとtagの種類が増えたら?
増える度に設定を増やすのは面倒くさい!
out_tag_fileがすること
out_tag_fileはtagの.(ドット)をディレクトリに見立てて、出力先ディレクトリを決定します。例えば次のように設定したとします。
<match prefix.**> type tag_file path /var/log/fluent time_slice_format %Y/%m/%d/%H flush_interval 60s </match>
その上でprefix.foo.barというtagで送られたデータは
/var/log/fluent/foo/bar/YYYY/MM/DD/HH/0.log
に保存されます。YYYY/MM/DD/HHは送られたデータの時間です。
これにより、例えばprefix.SERVICE_NAME.ROLE_NAMEという風にtag付けして送信することで、サービス単位などで簡単にログをディレクトリ分けして格納することができます。