在给定不同标签的情况下,使用同一来源的流利解析不同格式?

Parse different formats using fluentd from same source given different tag?

我在 docker-compose 文件中使用 fluentd,我希望它能够解析 apache 容器以及其他具有自定义格式的容器的日志输出。

为了区分格式,我打算在docker-compose中这样设置标签:

      logging:
        driver: "fluentd"
        options:
          tag: "apache2"

所以fluentd应该能够根据标签使用不同的格式。但是我如何配置 fluentd 来执行此操作?

documentation 说应该把它放在源代码部分(我不能这样做,因为我需要两种不同的格式):

  <parse>
    @type apache2
  </parse>

我的基本 source 看起来像这样:

<source>
  @type forward                                                                                         
  port 24224
  bind 0.0.0.0
</source>

是否可以使用 fluentd routing 对来自相同 source 且具有不同标签的数据使用两种不同的格式?

是的,有可能:

# 1. Omit parsing at the source
<source>
  @type forward                                                                                         
  port 24224
  bind 0.0.0.0
</source>

# 2. Write a dedicated filter for each format you want
<filter docker.apache2> # Check your exact produced tag, depends of versions. Just guessing here.
  @type parser
  key_name log
  <parse>
    @type apache2
  </parse>
</filter>

<filter docker.backend>
  @type parser
  key_name log
  <parse>
    @type json
  </parse>
</filter>

# 3. Match and store all
<match **>
  @type s3 
  ...
</match>