flume“or regex”过滤拦截器

mspsb9vt  于 2021-06-04  发布在  Flume
关注(0)|答案(2)|浏览(410)

我是flume的新手,找不到关于正则表达式的足够信息—这就是我需要帮助的原因。
我想做一个正则表达式过滤拦截器。
我有一些类似的事件:

  1. [20151010][type1][stuff]
  2. [20151011][type2][stuff]
  3. [20151012][type3][stuff]
  4. [20151013][type4][stuff]
  5. [20151014][type1][stuff]
  6. [20151015][type2][stuff]
  7. [20151016][type3][stuff]

我想做一个regex过滤器,包括type1和type2。
结果应该是:

  1. [20151010][type1][stuff]
  2. [20151011][type2][stuff]
  3. [20151014][type1][stuff]
  4. [20151015][type2][stuff]

有可能只做一个过滤器吗?或者我应该把信息复合起来,做两个不同的过滤器?

xriantvc

xriantvc1#

或者在regex中是好的和容易的:只要使用 | . 所以你想要的东西看起来像:

  1. type1|type2
ie3xauqp

ie3xauqp2#

使用regexinterceptor,可以使用或运算符过滤事件,如下所示,

  1. agent.sources.source_3.interceptors.filters.type = regex_filter
  2. agent.sources.source_3.interceptors.filters.regex = .*type1.*|.*type2.*
  3. agent.sources.source_3.interceptors.filters.excludeEvents = false

顺便说一句,这就是regex在scala/java中的工作原理

图案

  1. scala> import java.util.regex.Pattern;
  2. import java.util.regex.Pattern
  3. scala> import java.util.regex.Matcher;
  4. import java.util.regex.Matcher
  5. scala> val pattern = Pattern.compile(".*type1.*|.*type2.*")
  6. pattern: java.util.regex.Pattern = .*type1.*|.*type2.*

匹配器1

  1. scala> val matcher = pattern.matcher("[20151010][type1][stuff]")
  2. matcher: java.util.regex.Matcher = java.util.regex.Matcher[pattern=.*type1.*|.*type2.* region=0,24 lastmatch=]
  3. scala> val matches = matcher.matches()
  4. matches: Boolean = true

匹配器2

  1. scala> val matcher = pattern.matcher("[20151011][type2][stuff]")
  2. matcher: java.util.regex.Matcher = java.util.regex.Matcher[pattern=.*type1.*|.*type2.* region=0,24 lastmatch=]
  3. scala> val matches = matcher.matches()
  4. matches: Boolean = true

匹配器3

  1. scala> val matcher = pattern.matcher("[20151011][type3][stuff]")
  2. matcher: java.util.regex.Matcher = java.util.regex.Matcher[pattern=.*type1.*|.*type2.* region=0,24 lastmatch=]
  3. scala> val matches = matcher.matches()
  4. matches: Boolean = false

如果你看一下他们的实现代码,他们正在使用 matcher.find() ```
scala> val pattern = Pattern.compile(".type1.|.type2.")
pattern: java.util.regex.Pattern = .type1.|.type2.

scala> val matcher = pattern.matcher("[20151010][type1][stuff]")
matcher: java.util.regex.Matcher = java.util.regex.Matcher[pattern=.type1.|.type2. region=0,24 lastmatch=]

scala> val matches = matcher.find()
matches: Boolean = true

展开查看全部

相关问题