flume正则表达式过滤拦截器未按预期工作

kninwzqo  于 2021-06-03  发布在  Flume
关注(0)|答案(1)|浏览(279)

我正在尝试实现一个简单的flume测试应用程序,比如flume用户指南中的一个,只是我想使用log4j作为源代码并接受与某些regexp匹配的日志。因此,我实现了一个随机日志生成器,并将log4j和flume配置为:

log4j.属性


# Root logger option

log4j.rootLogger=ALL, stdout

# 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L -     %m%n

# 

log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
log4j.appender.flume.Hostname = localhost
log4j.appender.flume.Port = 41414

# configure a class's logger to output to the flume appender

log4j.logger.generator.LogGenerator = INFO,flume

log4j.appender.flume.layout=org.apache.log4j.PatternLayout
log4j.appender.flume.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

第二示例.conf


# Flume test file

# Listens via Avro RPC on port 41414 and dumps data received to the log

agent.channels = ch-1
agent.sources = src-1
agent.sinks = sink-1

agent.channels.ch-1.type = memory
agent.channels.ch-1.capacity = 10000000
agent.channels.ch-1.transactionCapacity = 1000

agent.sources.src-1.type = avro
agent.sources.src-1.channels = ch-1
agent.sources.src-1.bind = localhost
agent.sources.src-1.port = 41414

agent.sources.src-1.interceptors = intrcptr
agent.sources.src-1.interceptors.intrcptr.type = regex_filter
agent.sources.src-1.interceptors.intrcptr.regex = "ERROR [0-4]:"

agent.sinks.sink-1.type = logger
agent.sinks.sink-1.channel = ch-1

生成的日志示例:

2013-11-18 15:27:06 ERROR LogGenerator:33 - ERROR 3: 68290a60-8c25-494d-9d0d-4361a01f065f
2013-11-18 15:27:35 WARN  LogGenerator:33 - ERROR 2: 154c4779-ad6a-4b10-9ba7-199a02ad7554
2013-11-18 15:28:49 WARN  LogGenerator:33 - ERROR 5: a2a94b78-e387-4937-b6b3-c480e2c7ea76
2013-11-18 15:29:35 FATAL LogGenerator:33 - ERROR 6: 49baaa6b-19cb-48c8-9f92-b7a75f8d04dc

问题是regex过滤拦截器不排除任何事件,logger sink记录所有生成的日志消息。我已经找到了这个源代码,并编写了一个小测试,其中包含生成的日志和稍微修改的intercept方法(以便它接受并返回字符串,而不是事件),它可以按预期工作。
我现在真的很困惑,并倾向于认为这是一个Flume虫。任何帮助都将不胜感激。
p、 我使用的是“apache-flume-1.4.0-bin”flume。

bbmckpt7

bbmckpt71#

这似乎是一个Flume问题。如果Flume的配置如下所示,则它是可复制的: Log4jAppender -> Avro source -> Regex interceptor -> Logger Sink 解决方法是使用以下两个代理配置flume: Log4jAppender -> Avro source -> Avro sink -> Avro source -> Regex interceptor -> Logger Sink

相关问题