自定義Interceptor
自定義過濾器類:
新建Maven項目,新建類,實現Interceptor接口,重寫intercept方法,如:將header添加到body中,
- 重寫父類方法:close(),intiialize()
代碼如下
@Override
public void close() {
}
@Override
public void initialize() {
}
2.重寫父類方法:intercept()
自定義攔截器,這裏是將header中的數據加入到body中,中間用Tab鍵分隔。
@Override
public Event intercept(Event ev) {
Map<String, String> event = ev.getHeaders();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
if (event.containsKey("timestamp")) {
timestampHeaderName = "timestamp=" + event.get("timestamp");
}
if (event.containsKey("host")) {
hostHeaderName = "host=" + event.get("host");
}
baos.write(ev.getBody());
baos.write("\t".getBytes(charsetName));
baos.write(timestampHeaderName.getBytes(charsetName));
baos.write("\t".getBytes(charsetName));
baos.write(hostHeaderName.getBytes(charsetName));
ev.setBody(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return ev;
}
3.重寫方法intercept()
這裏寫的代碼幾乎是固定了的,主要實現攔截的方法在上邊的方法中已經定義好了,這裏只是實現了一下,多條數據的時候的實現
代碼如下:
@Override
public List<Event> intercept(List<Event> event) {
List<Event> result = new ArrayList<>();
for (Event ev : event) {
result.add(ev);
}
return result;
}
4.自定義類種類:Builder
在builder的最後調用了主方法,但是在集羣中調用的是這個方法。
public static class Builder implements Interceptor.Builder {
@Override
public void configure(Context arg0) {
}
@Override
public Interceptor build() {
return new MyApp();
}
}
5.導出jar包到集羣中
在flume的安裝目錄下依次創建如下文件夾:plugins.d/自定義名稱/lib/這裏放jar包
總的路徑如:
/usr/share/flume/plugins.d/intercept/lib/intercept.jar
6啓動自定義properties文件,
啓動命令:flume-ng agent -f properties配置文件名稱 -n properties文件中的名稱 -Dflume.root.logger=Info,console
如果不需要打印日誌,-Dflume.root.logger=Info,console不需要添加。
properties配置文件見上篇博客:blog.csdn.net/James_JR10/article/details/78255910