Fluentd v1でのfluent-plugin-s3の設定方法が以前とは結構変わっているため、どのように書くべきか記載する。

Fluentd v1より前の書き方

以前は以下のように記載すれば、1分ごとにS3にファイルを保存し、また1時間ごとにS3のパスを分けることができた。

<match **>
  @type s3
  aws_key_id XXXXXXXXXXXXXXXXXXXX
  aws_sec_key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  s3_bucket test
  s3_region ap-northeast-1

  format ltsv
  flush_interval 60

  buffer_type file
  buffer_path /var/log/td-agent/buffer/test

  path "dt=%Y-%m-%d-%H/#{Socket.gethostname}_"
  time_slice_format %Y%m%dT%H
</match>

Fluentd v1の書き方

buffer tag,time

Fluentd v1からは、各所で<buffer>のようにディレクティブを使うようになっている。<buffer>ディレクティブを使うときにtimeを記載しないとpath等で正しく日時を扱えず、常に%Y%m%d%Hが本日の0時を指してしまう。(日本で実行しているので例えば2019041909となる)

https://docs.fluentd.org/v1.0/articles/out_s3#example-configuration

if you want to use ${tag} or %Y/%m/%d/ like syntax in path / s3_object_key_format,
need to specify tag for ${tag} and time for %Y/%m/%d in argument.

同じ設定をFluentd v1用に書き換えると、以下のようになる。

<match **>
  @type s3
  aws_key_id XXXXXXXXXXXXXXXXXXXX
  aws_sec_key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  s3_bucket test
  s3_region ap-northeast-1
  <format>
    @type ltsv
  </format>
  <buffer time>
    @type file
    path /var/log/td-agent/buffer/test
    timekey 1m
    timekey_wait 0
  </buffer>
  path "dt=%Y-%m-%d-%H/#{Socket.gethostname}_"
  time_slice_format %Y%m%dT%H
</match>

timekey, timekey_wait

https://docs.fluentd.org/v1.0/articles/out_s3#bufferからflush_intervalの設定がなくなっている。time sliced bufferがデフォルトのbuffer設定とのことなので、buffer-sectionのtime sliced bufferの項をもとにtimekeytimekey_waitを設定する。

The buffer of the S3 plugin. The default settings is time sliced buffer.

  <buffer time>
    @type file
    path /var/log/td-agent/buffer/test
    timekey 1m
    timekey_wait 0
  </buffer>

FluentdとS3の他の記事