我正在尝试为fluentd + fluentd-s3-plugin编写一个干净的配置文件,并将其用于许多文件。
我想避免为每个文件复制和粘贴每个<source>
和每个<match>
,所以我想让它变得有点动态。我到现在所拥有的:
<source>
@type tail
path /var/www/blabla/blabla/log/production.log
pos_file /var/www/blabla/blabla/log/production.log.pos
tag production-log
format /(?<time>.*)/
</source>
<match production-log>
@type s3
s3_bucket xxxx
s3_region xxxx
path "staging/%Y/%m/%d/#{Socket.gethostname}/"
s3_object_key_format "%{path}productionlog-%{time_slice}-#{Socket.gethostname}-%{index}.%{file_extension}"
# 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 <buffer> argument.
<buffer tag,time>
@type file
tag ${tag}
path /var/www/blabla/blabla/log/buffer/
timekey 3600 # (default 3600) 1 hour partition
timekey_wait 1m
timekey_use_utc true # use utc
</buffer>
<format>
@type json
</format>
</match>
如您所见,我多次使用生产日志,所以我的问题是2:
如何使用tag
中的文件名?
如何在s3_object_key_format
中使用此传递的代码? (我知道有说明评论,但我不明白)
答案 0 :(得分:3)
您能够解决上述问题吗?您确实需要将标记字段传递给缓冲区,而无需使用缓冲区内部。
这是我的有效配置。希望这会有所帮助,如果尚未解决。我的不同来源为标签字段发送了不同的值,在S3下,我按标签字段创建了单独的文件夹并将对象放置在它们下面。
所以会像(app1和app2是标签)
mybucket-> topPrefix-> app1-> app.log
mybucket-> topPrefix-> app2-> app.log
<match>
@type s3
s3_bucket "mybucket"
path "topPrefix/${tag}"
s3_object_key_format "%{path}/%{time_slice}_#{Socket.gethostname}_%{index}.%{file_extension}"
include_time_key true
time_format "%Y-%m-%dT%H:%M:%S.%L"
<buffer tag,time>
@type file
path /fluentd/buffer/s3
timekey_wait 1m
timekey 1m
chunk_limit_size 64m
</buffer>
<format>
@type json
</format>
time_slice_format %Y%m%d%H%M
</match>