Fluentd - 使用日志文件名中数据内部的变量

Fluentd - Use variable from inside the data in logfile-name

我对 fluentd 还很陌生,我不确定它是否可以做我现在正在尝试的事情。我正在使用它从同一主机上的一大堆 Docker-容器 运行 中收集日志数据,因此经常讨论的 "hostname"-变量对我没有帮助。相反,我收到的日志数据包含一个字段 "container_name"。 现在我想要的是让 Fluentd 写入名称为 "container_name-id_timestamp" 的日志文件,但到目前为止我尝试过的方法 none 已经奏效。我不知道如何评估数据包中的字段。

我继续像这样匹配所有内容:

<match *.**>
   type file
   path /var/log/fluent/
   time_slice_format %Y-%m-%d
   time_slice_wait 10m
   time_format %Y-%m-%dT-%H-%M-%S-%z
</match>

然后尝试了各种变量,比如

path /var/log/fluent/${container_name}_%Y-%m-%d

path /var/log/fluent/${tag_parts[2]}_%Y-%m-%d

但不是解释它而是字面意思。我错过了什么? 我也可以为每个容器设置子文件夹,我遇到了同样的问题。

谢谢。

任何来这里寻找解决方案的人,我已经找到了解决方法:

<match docker.*>
 type rewrite_tag_filter
 rewriterule1 container_name ^\/(.*)$ tagged.
</match>

<match tagged.*>
 type forest
 subtype file
 remove_prefix service
 <template>
 time_slice_format %Y-%m-%d
 path /var/log/fluentd/${tag}.*.log
 </template>

</match>

发生了什么事?

  1. 寻找匹配项,即 docker.325435abcd-tag
  2. 使用 fluent_plugin_rewrite_tag_filter 从数据中获取 container_name
  3. 用 container_name
  4. 重写标签
  5. 匹配标记数据
  6. 使用 forest_plugin 模板化日志文件名以使用标签
  7. 完成