流利的:多个过滤器和匹配项的一种来源

时间:2018-12-28 15:20:59

标签: fluentd

我有资料来源:

<source>
    @type tail
    tag service
    path /tmp/l.log
    format json
    read_from_head true
</source>

我想对其进行几个过滤,然后match进行几个输出:

<source>
    @type tail
    tag service.pi2
    path /tmp/out.log
    format json
    read_from_head true
</source>

<source>
    @type tail
    tag service.data
    path /tmp/out.log
    format json
    read_from_head true
</source>

<filter service.data>
   # some filtering
</filter>

<filter service.pi2>
   # some filtering
</filter>

<match service.data>
  @type file
  path /tmp/out/data
</match>

<match service.pi2>
  @type file
  path /tmp/out/pi
</match>

到目前为止,要使所有功能正常运行,我必须使用不同的标签复制source。我可以从一种来源定义中使它起作用吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用插件copyrelabel来实现。示例配置如下所示。

//One Source
<source>
    @type tail
    tag service
    path /tmp/l.log
    format json
    read_from_head true
</source>

//Now Copy Source Events to 2 Labels
<match service>
  @type copy
  <store>
    @type relabel
    @label @data
  </store>
  <store>
    @type relabel
    @label @pi2
  </store>
</match>

//@data Label, you can perform desired filter and output file
<label @data>
  <filter service>
    ...
  </filter>
  <match service>
    @type file
    path /tmp/out/data
  </match>
</label>

//@pi2 Label, you can perform desired filter and output file
<label @pi2>
  <filter service>
    ...
  </filter>
  <match service>
    @type file
   path /tmp/out/pi
  </match>
</label>

这篇Routing示例文章提供了几种其他方法来重写标签等方法,但是对我来说,我喜欢使用标签,而且上面看起来很简单。

我已经测试了上述配置,并且工作正常。让我知道您的想法:)。

答案 1 :(得分:0)

我是用 rewrite_tag_filter 做到的。

首先我由source创建TCP

<source>
  @type tcp
  tag tcp.price-parser
  port 20001
  bind 0.0.0.0
  <parse>
    @type json
  </parse>
</source>

第二步是匹配tcp.price-parcer标签并用JSON数据重写标签

<match tcp.price-parser>
  @type rewrite_tag_filter
  <rule>
    key tag
    pattern /(info|error)/
    tag $1.${tag}
  </rule>
</match>

它的重要集合 rule 并匹配它。如果不匹配,则 fluentd 不会再进一步​​。 所以我的 keytag。此密钥来自 JSON。例如 JSON:

{"tag":"info","message":"My first message"}

并规则 pattern 正则表达式 JSON tag 键与 /(info|error)/ 值。如果找到 infoerror,我们可以重写 fluentd tag。 SO tag $1.${tag} 等于 info.tcp.price-parsererror.tcp.price-parser

现在你可以匹配重写标签

<match info.tcp.price-parser>
  @type slack
  token xoxb-***
  channel price-parser
  username la
  icon_emoji :ghost:
  message "%s"
  message_keys message
  flush_interval 5s
</match>