S3に保存するときのパス

FluentdでS3にファイルを保存するときのパスはs3_object_key_formatで決定される。

https://docs.fluentd.org/v1.0/articles/out_s3#s3_object_key_format

デフォルトの設定値は%{path}%{time_slice}_%{index}.%{file_extension}%{index}が使われており、.gzなどのファイル拡張子の直前に1からの連番がつけられる。

HeadObjectが意図せず発行されていた

しかし連番をつけるためにはFluentdが現在の最新の番号を知る必要があり、S3にHeadObjectを発行している。

AWS Cost ExplorerでAPI Operation単位でコストをみると、意図せずHeadObjectの料金がかかっていることがわかる。

%{uuid_flush}でAPI発行を抑える

%{index}ではなく%{uuid_flush}を使えば、Fluentdが単体でUUIDを発行してくれるので、それを使うほうがいい。

以下に設定例をあげる。

<source>
  @type tail
  path /var/log/test
  <parse>
    @type ltsv
  </parse>
  tag tail_test
</source>

<match tail_test>
  @type s3
  aws_key_id XXXXXXXXXXXXXXXXXXXX
  aws_sec_key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  s3_bucket test
  s3_region ap-northeast-1
  <inject>
    hostname_key hostname
    time_key time
    time_type string
    tag_key tag
  </inject>
  <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
  s3_object_key_format %{path}_%{time_slice}_%{uuid_flush}.%{file_extension}
</match>

FluentdとS3の他の記事