标记到第二个输出的子集

时间:2016-07-19 01:31:09

标签: logging fluentd

我有一项服务我正在尝试记录日志并将其发送到某些位置,具体取决于他们所指的内容。流利有意义。目前,我只是把所有东西都扔到了s3,这很好。但是我现在想要一个小的子集(以短语“ACTION:”开头的任何行)也被发送到mongo数据库。我仍然希望一切都发送到s3。

我这里有这个配置文件,当然不会起作用

<source>
  @type  forward
  @id    input
  @label mainstream
  port   24224
</source>

<label @mainstream>

  <match foo.**>
    @type copy

    <store>
      @type s3

      ...
    </store>
    <store>
      @type rewrite_tag_filter
      rewriterule1 log "^ACTION:" foo.bar
    </store>

  </match>

  <match foo.bar>
    @type mongo

    ...
  </matc>
</label>

一旦我们到达第一个匹配标记,所有这些都将被收集和停止,rewrite_tag_filter的正常行为似乎没有超过<store>

我尝试过的其他事情。

  • 复制s3 store,使其使用两次。但是我不希望我的s3输出被拆分。
  • 在不同的端口转发给自己,通过不同的标签运行源,但它不会连接。

我确定我所要求的并不是太疯狂。有没有人以前做过这样的事情?

1 个答案:

答案 0 :(得分:2)

只需要小心重拍什么。如果你使用的东西将与上面的匹配相匹配,它就不会继续前进,所以它需要不同。在这种情况下,即使标记不同,因为我使用foo启动它,它也不会移过<match foo.**>

<source>
  @type  forward
  @id    input
  @label mainstream
  port   24224
</source>

<label @mainstream>

  <match foo.**>
    @type copy

    <store>
      @type s3

      ...
    </store>
    <store>
      @type rewrite_tag_filter
      # Changed tag from foo.bar to this
      rewriterule1 log "^ACTION:" totally.different.tag.name
    </store>

  </match>


  # the new totally.different.tag.name won't get caught by the 
  # first <match foo.**> so it will actually reach this one
  <match totally.different.tag.name>
    @type mongo

    ...
  </match>
</label>