57972


各自が好きな内容をはいてるサーバーのデバッグログを  
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

[code]

    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
    
    
[/code]

と format だけオーバーライドして中身をエスケープするように変更してみたのですが  
`<match api.**> の中に`

[code]

      <case api.*.api>
        format api_log
        fields time,level,text
      </case>
    
[/code]

という設定を追加しても

[code]

    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
    
[/code]

というエラーになります

カスタム formatter を認識させるにはどうすればいいでしょうか

そもそもカスタムしなくてもデフォルトの機能で実現する方法はないでしょうか

fluentd は 0.12.40 です


CC BY-SA 4.0
2019-09-05T03:42:23.180
57861
2019-09-10T21:59:19.503
2019-09-06T17:29:39.193
question
ruby fluentd
fluentd で改行やカンマをエスケープしてCSV出力する方法


ファイル名を `/etc/fluentd/plugin/api_log.rb` から
`/etc/fluentd/plugin/formatter_api_log.rb` に変更してみてください。


CC BY-SA 4.0
2019-09-10T21:59:19.503
57972
2019-09-10T21:59:19.503
19333
57861
answer