flume1.9.0 拦截器-正则过滤拦截器(Regex Filtering Interceptor) 作者:马育民 • 2021-10-21 21:08 • 阅读:10220 # 案例 监听文件,只保留 `error:` 为 **开头** 的数据,并打印到控制台 使用 **正则表达式** 拦截器,如果是 `error:` 开头的数据,就保留,否则就过滤掉 # 创建测试目录 登录 `hadoop1` ,创建以下目录,用于测试: ``` /test_flume ``` # 编写配置文件 登录 `hadoop1`, ``` cd /program/flume-1.9.0/conf ``` ``` vim my_regex_filter.conf ``` 内容如下: ``` # 定义agent名字为a1,相当于变量名,可任意起 # 设置 sources、sinks、channels的名字 a1.sources = r1 a1.sinks = k1 a1.channels = c1 # 配置source类型为taildir a1.sources.r1.type = TAILDIR a1.sources.r1.filegroups = f1 # 定义拦截器 error_filter a1.sources.r1.interceptors=error_filter # 定义正则拦截器filter a1.sources.r1.interceptors.error_filter.type=regex_filter # 定义正则,要拦截的字段 a1.sources.r1.interceptors.error_filter.regex=^error:* # true,满足正则就过滤掉,默认是false a1.sources.r1.interceptors.error_filter.excludeEvents=false # 监控该文件 a1.sources.r1.filegroups.f1 = /test_flume/test_error.log # 配置 sink 为打印到控制台中 a1.sinks.k1.type = logger # 配置 channel 类型为内存 a1.channels.c1.type = memory # 内存队列最大为1000,可以存储1000个event a1.channels.c1.capacity = 1000 # 一个事务中从source接收的events数量或发送给sink的events数量最大为100 a1.channels.c1.transactionCapacity = 100 # 将source 和 sink 绑定到channel上 a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1 ``` # 启动 进入 flume 根目录: ``` cd /program/flume-1.9.0/ ``` 执行下面命令(必须在上面目录中才能执行): ``` bin/flume-ng agent -n a1 -c conf -f conf/my_regex_filter.conf -Dflume.root.logger=INFO,console ``` ### 执行结果 会打印一大堆信息,看到下面字样,表示启动成功: ``` 2021-10-20 22:59:04,284 (lifecycleSupervisor-1-4) [INFO - org.apache.flume.instrumentati on.MonitoredCounterGroup.register(MonitoredCounterGroup.java:119)] Monitored counter gro up for type: SOURCE, name: r1: Successfully registered new MBean. 2021-10-20 22:59:04,285 (lifecycleSupervisor-1-4) [INFO - org.apache.flume.instrumentati on.MonitoredCounterGroup.start(MonitoredCounterGroup.java:95)] Component type: SOURCE, n ame: r1 started ``` # 测试: 监控 1.log 文件 修改 `/test_flume/test_error.log` 文件,追加内容,如下: ``` echo error:ceshi1 >> test_error.log ``` flume 控制台会打印: ``` 2021-12-01 11:32:16,945 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 65 72 72 6F 72 3A 63 65 73 68 69 31 error:ceshi1 } ``` 说明 flume 成功监控到 该文件内容中:`error:` 开头的数据 原文出处:http://malaoshi.top/show_1IX25GEx9Yn4.html