Fluentd:相同的文件,不同的过滤器和输出

Fluentd: Same file, different filters and outputs

希望在这里得到一些帮助。 我的 Fluentd 设置配置为将日志发送到 2 个输出,每个输出都需要不同的日志结构。

到现在的配置是两次扫描日志,每次添加不同的tag,根据tag配置相关的解析输出。

例如:

myapp.log -> tag app_splunk -> filters of type x, y, x -> match and output to splunk

myapp.log -> tag app_s3 -> different set of filters -> output to S3

我正在尝试找到一种正确的方法来处理一次日志并在没有双重标记的情况下获得相同的结果。 我尝试使用@relabel 并根据标签提供一组新的过滤器,结果是日志已经被第一个过滤器集合处理过,现在新的过滤器不能正常工作。

知道如何实现吗?

<match **>
  @type copy
  <store>
    @type relabel
    @label @app_splunk
  </store>
  <store>
    @type relabel
    @label @app_s3
  </store>
</match>

<label @app_splunk>
  <filter **>
    @type grep
    <regexp>
      key log_type # <- not sure what your're filtering on, replace with your own.
      pattern splunk
    </regexp>
  </filter>
  <match **>
    @type splunk
    ...
  </match>
</label @app_splunk>

<label @app_s3>
  <filter **>
    @type grep
    <regexp>
      key log_type
      pattern s3
...
</label @app_splunk>
  • @type copy 创建一个独立的日志流副本。
  • 一个标签描述了一个独立的日志流管道。 将一个stream复制到2个不同的label时,可以过滤匹配label1中的任何内容,不会影响label2的输入。

您可以根据需要制作任意数量的副本。

这还允许您在每个标签内生成重叠的子流。像label1可以过滤掉DEBUG及更高的日志级别,而label2只能取INFO及更高。因为它们是独立的流,所以在这种情况下,两个目的地都将接收 INFO 和更高的值,除此之外,label1 还将接收 DEBUG