fluentd で改行やカンマをエスケープしてCSV出力する方法
各自が好きな内容をはいてるサーバーのデバッグログを
Athena でよめるよう csv にして S3 に保存したいのですが
fluentd で改行やカンマが入ってる文字列を
CSVとして認識できる形に整形する方法はないでしょうか
fluentd にデフォルトで入っている format csv では
エスケープはしてくれないようで改行がそのまま改行として出力されてしまい
CSVとして読み込めないファイルになってしまいます
https://docs.fluentd.org/v/0.12/developer/plugin-development
をみながら
/etc/fluentd/plugin/api_log.rb
module Fluent
require 'fluent/plugin/formatter_csv'
module TextFormatter
class ApiLogCsvFormatter < CsvFormatter
Plugin.register_formatter("api_log", self)
def configure(conf)
super
end
def format(tag, time, record)
record['text'] = record['text'].inspect
super
end
end
end
end
と format だけオーバーライドして中身をエスケープするように変更してみたのですが
<match api.**> の中に
<case api.*.api>
format api_log
fields time,level,text
</case>
という設定を追加しても
2019-09-05 03:31:05 +0000 [error]: #0 [match_api] failed to configure sub output s3: Unknown formatter plugin 'api_log'. Run 'gem search -rd fluent-pl
ugin' to find plugins
というエラーになります
カスタム formatter を認識させるにはどうすればいいでしょうか
そもそもカスタムしなくてもデフォルトの機能で実現する方法はないでしょうか
fluentd は 0.12.40 です