Fluentd - 在logfile-name

时间:2015-11-03 12:43:06

标签: ruby fluentd

我很流利,我不确定它是否可以做我现在正在尝试的事情。我正在使用它来收集在同一主机上运行的一大堆Docker容器中的日志数据,因此经常讨论的"主机名" -variable对我没有帮助。相反,我收到的日志数据包括一个字段" container_name"。 现在我想要的是让Fluentd写一个名为" container_name-id_timestamp"的日志文件。但到目前为止,我所尝试的方式都没有奏效。我不知道如何评估数据包中的字段。

我继续前进并匹配这样的一切:

<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

但不是解释它而是文字。我错过了什么? 我对每个容器的子文件夹也没问题,我遇到了同样的问题。

谢谢。

1 个答案:

答案 0 :(得分:1)

任何人来这里寻找解决方案,我都知道该怎么做:

<match docker.*>
 type rewrite_tag_filter
 rewriterule1 container_name ^\/(.*)$ tagged.$1
</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模板log-file-name以使用标记
  7. 完成