使用流利的fluent-plugin-rewrite-tag-filter插件拆分docker stdout和stderr

csa*_*ble 8 fluentd docker

我目前有以下配置:

<match docker.nginx>
  @type rewrite_tag_filter
  rewriterule1 source stdout docker.nginx.stdout
  rewriterule2 source stderr docker.nginx.stderr
</match>
Run Code Online (Sandbox Code Playgroud)

但这意味着,每个容器我必须做同样的事情.

这不起作用,但可能你会得到我想要的东西:

<match docker.*>
  @type rewrite_tag_filter
  rewriterule1 source stdout docker.*.stdout
  rewriterule2 source stdout docker.*.stderr
</match>
Run Code Online (Sandbox Code Playgroud)

所以我的问题是我可以以某种方式引用匹配块中匹配的标签吗?因此,如果它是nginx/rabbitmq/zookeeper/anything,它会将所有事件流拆分为docker.<fluentd-tag>.stdout和stderr.

提前致谢!

Von*_*onC 1

查看Fluentd record_transformer 参数,您可以尝试使用占位符来引用标记中捕获的模式,并根据这些捕获的值应用动态转换。

根据您的要求,您可以使用通配符 ( ) 来捕获标记,然后在插件中*使用占位符 ( ) 引用捕获的值。${tag_parts[N]}rewrite_tag_filter

<match docker.*>
  @type rewrite_tag_filter
  rewriterule1 source stdout docker.${tag_parts[1]}.stdout
  rewriterule2 source stderr docker.${tag_parts[1]}.stderr
</match>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,${tag_parts[1]}将指代标签后面的部分docker.(例如nginxrabbitmqzookeeper、 等)。

任何与该模式匹配的标签docker.*都将根据源( 或 )将其事件重写stdout为、等stderr标签。docker.nginx.stdoutdocker.rabbitmq.stderr