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>