flume“or regex”过滤拦截器

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

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

[20151010][type1][stuff]
[20151011][type2][stuff]
[20151012][type3][stuff]
[20151013][type4][stuff]
[20151014][type1][stuff]
[20151015][type2][stuff]
[20151016][type3][stuff]

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

[20151010][type1][stuff]
[20151011][type2][stuff]
[20151014][type1][stuff]
[20151015][type2][stuff]

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

xriantvc

xriantvc1#

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

type1|type2
ie3xauqp

ie3xauqp2#

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

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

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

图案

scala> import java.util.regex.Pattern;
import java.util.regex.Pattern

scala> import java.util.regex.Matcher;
import java.util.regex.Matcher

scala> val pattern = Pattern.compile(".*type1.*|.*type2.*")
pattern: java.util.regex.Pattern = .*type1.*|.*type2.*

匹配器1

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.matches()
matches: Boolean = true

匹配器2

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

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

匹配器3

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

scala> val matches = matcher.matches()
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

相关问题