flume1.8在线上业务中的使用和总结

什么是flume?

  • flume是一个日志采集、聚合和传输的系统

作用是什么?

  • 作用就是将业务集群上各个机器上的日志收集起来,对数据做集中处理。

部署文档

  • 最新版的flume1.8,请参官网 http://flume.apache.org/FlumeUserGuide.html 的使用说明,真的很详细。
  • 网上也有flume1.7的搭建教程,Google一下就可以,搭建过程没有太大的区别。

前期调研

在考虑日志的收集之前,我们主要调研了flume和logstash两款产品。当前业界使用较多的是logstash作为日志收集的工具。现将flume和logstash在我们的业务考虑范围内的区别简单罗列:

  • Logstash偏重于字段的预处理;flume偏重数据的传输。
  • Logstash有插件可以使用,配置比较灵活;flume则是强调用户的自定义开发(输入、存储、输出等)。
  • Logstash的输入、过滤和输出之间都有缓冲区;flume是有channel作持久化(可以自定义配置)

选择使用flume的原因:

  • 传输数据的可靠性(主要因素)。每一个source和sink都被封装成一个事务存储在channel中,可以保证数据准确的被下游消费。如果下游服务挂掉,flume可以将数据持久化到本地,等待下游服务恢复后在输出。
  • 只传输数据不解析。不会对原始的数据进行过滤和预解析,尽量保证主站机器的资源不被日志服务占据太多。所有的解析操作可以放在下游进行。
  • 多种配置方式。有丰富的数据读取方式,tail、socket、exec等等。数据存储可以在本地或者内存,可以配置各种存储空间大小。多种数据输出方式,输出到hdfs、下游flume、es、kafka等等。
  • 多输入输出。可以同时有多个数据源,也可以同时将数据输出到多个下游。
  • 如果实时性要求不高的话可以采取批量读取的方式。
  • 输出数据时可以对数据进行压缩后输出,存储带hdfs的话可能会需要吧。
  • 有java的api,我们可以自己实现对数据的过滤。

以上的调研并不能全面的概括flume的特性,只是它开箱即用的基本特性,其可扩展性很强大。

我们的日志收集系统的整体框架设计

flume1.8在线上业务中的使用和总结_第1张图片

如上图所示,在每个nginx机器上部署一个flume的客户端,将我们关心的日志文件写到到flume的配置文件中,具体的配置可以自行网上查找。

遇到的问题及解决办法

1、flume的服务挂了 日志数据怎么办?
可以采用将服务以守护进程的方式启动,监控进程的状态,日志是后端和nginx实时打在磁盘的,所以就算服务挂了,重启后也是可以读取到日志的对应位置。或者将flume的channel配置成file,就不会出现日志数据丢失的问题。

2、监听的文件fd换了 怎么监控?
flume监控的是文件名,并不是fd,所以当原始日志切换切分时,新创建的日志文件只要名称不变,还是可以监控到。

3、当flume的sink配置的是hdfs时,可以选择将数据压缩。flume支持通用的压缩算法。我们采用了gzip的压缩算法,比不压缩节省约90%的磁盘空间。

最最最重要的问题来了

在flume的sink配置的是hdfs时,请做以下操作,顺序无所谓:

  • flume使用的是hadoop和hdfs中的lib目录下的jar包,所以需要将对应的jar包导入到flume的lib目录下;
  • 导入core-site.xml和hdfs-site.xml文件,如果文件中配置的是hadoop节点的名字,需要将名字和对应的机器ip配置到/etc/hosts中,不然flume找不到;
  • 一定要将hadoop集群中的native目录导入到flume服务端所在机器的环境变量中,命令 export ~/flume/native。原因是Hadoop是使用Java开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库的概念,通过本地库,Hadoop可以更加高效地执行某一些操作。

没有导入的时候一般的操作没有什么问题,但是,使用gzip做数据压缩时就会出现系统环境的问题,导致hadoop集群上hive不能正确的解压缩数据。
没有导入native时,gzip压缩的文件使用file查看文件类型时是: gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT)
导入后,gzip压缩的文件使用file查看文件类型时是: gzip compressed data, from Unix。这才是我们想要的压缩文件。
所以,一定要导入native!!!千万不要踩坑!!!

目前发现的问题

1、当原始日志被修改过,flume会认为该文件是新创建的。但是线上的日志一般不会有rd去修改,所以目前数据收集工作一切正常。

你可能感兴趣的:(大数据)