flume1
在多台服务器上查看系统日志定位故障太麻烦,需要把它们都收集到一个数据库中进行分析,最后选择了flume+mysql。原因是flume的开发量最小,mysql最熟。自己开发了个sink插件,把sources来的event保存到数据库。原则上整体架构越简单、越少开发越好。
应用主机上跑flume,sources采集应用日志,通过avro sink传输到一台服务器上汇总,该服务器使用avro sources对接各个应用服务器上的flume传来的event,然后用自定义的databaseSink插件保存到mysql服务器。在应用服务器的日志采集时sources上配置一个拦截器,把主机ip和自定义一个模块名称放到header中,以便于以后分析。
需要注意的初级问题:
1、databaseSink插件需要考虑周全,尤其是数据库异常要妥善处理,毕竟网络和数据库环境时刻都有可能变化。
2、配置好channel的capacity、transactionCapacity、sink的batchSize、source的batchSize,以及flume的java内存,这样的文章网上大把。
3、拦截器出现过ip为127.0.0.1,后来发现时主机hosts文件中有“127.0.0.1 Server-6”的一行,去掉就能插入正确的ip到header了。
4、exec类型的sources在日志量大的情况下,会莫名其妙的down掉,而且没有异常提示,从debug吐出来的日志看,像是sink取不到event,不知道是否配置没优化好。改成tailDir貌似没问题。
下一步需要做的:
1、在应用日志采集端配置正则过滤,争取去掉一批无用的日志,减少不必要的数据
2、扩展databaseSink,识别出日志中的日期,存入到表中的固定字段,方便后续分析
3、优化databaseSink功能,自动建表