flume笔记-2

  搭好的flume,因为不能完整保存远端传来日志,决定采取自定义sink的方式来记录远端的日志,顺便保存到数据库。动手做起来还是比想象中要简单。

  思路就是按照规范编写jar,放在flume的lib目录,并且配置好sink的类型为自己定义的类名,根据自己的需要写好自定义的配置。

  整个过程可以参看:https://www.cnblogs.com/jhxxb/p/11584363.html。简单来说继承AbstractSink 类并实现 Configurable 接口。configure函数接收配置,start初始化,stop断开外部存储的连接,process进行处理

  如果要保存到oracle数据库,需要把oracle的驱动一起放在lib目录。

  对端传来的数据在event.getBody(),还可以在header中放入k-v值,通过event.getHeaders获取。

  可以通过拦截器Interceptors执行拦截和过滤动作,参看:https://www.jianshu.com/p/c7b3e357fc6b

  我使用拦截器在每个日志生产服务器的sources上增加该机器的ip,而最终落地到数据库上就可以看到该日志来源于哪个服务器。

  client端的配置:

a1.sources.exec.interceptors = ip
a1.sources.exec.interceptors.ip.type = host
a1.sources.exec.interceptors.ip.hostHeader = ip
a1.sources.exec.interceptors.ip.useIP = true

 

原文地址:https://www.cnblogs.com/badwood316/p/13380779.html