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功能,自动建表

posted @ 2022-11-05 11:58  badwood  阅读(26)  评论(0编辑  收藏  举报
Badwood's Blog