Flume 海量日志搜集神器
优采云 发布时间: 2020-08-25 02:33Flume 海量日志搜集神器
Flume 海量日志搜集神器关于日志搜集服务器日志搜集基于服务器日志的应用服务器日志的特征:日志采集系统的通常构架
日志采集系统的设计要求Flume简介是哪些?
一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。Cloudera公司出品。
角色
版本Flume OG(original generation,2009年7月):分布式日志搜集系统,有Master概念,依赖于Zookeeper,分为agent,collector,storage三种角色Flume NG(next generation,2011年10月):代码构建,功能精简,去掉master,collector角色,专注数据的搜集与传递Flume组成、安装与配置组成
Flume Flow:
处理流程:
source以event为单位从数据源接收信息, 然后保存到一个或多个channel中(可以经过一个或多个interceptor的预处理) , sink从channel中拉取并处理信息(保存, 丢弃或传递到下一个agent) , 然后通知channel删掉信息。
安装
依赖:
步骤:
下载安装包解压配置flume-env.sh : 设置JAVA_HOME配置 agent: conf/flume-conf.properties启动: $FLUME_HOME/bin/flume-ng agent -n a1 -c conf -f xxx.properties配置模板
演示
具体的安装过程网上有很多,需要注意的是flume依赖的jdk为1.7及以上。但是若果linux的jdk版本不是1.7及以上也毋须更改系统的jdk,只需再度安装jdk高版本后,在flume配置文件中指定jdk高版本路径即可。
接下来,通过一个小反例,测试一下。
效果:
flow从指定端口获得数据,存入channel,sink从channel中拉取数据,打印输出。
分析:
通过阅读官网document选定source、channel、sink的类型。
source选定netcat类型,其中加粗的属性为必填属性;channel选定memory类型;sink选定logger类型。
根据官网写出flume agent配置信息如下:
a1.sources = s1
a1.sinks = k1
a1.channels = c1
a1.sources.s1.type = netcat
a1.sources.s1.bind = localhost
a1.sources.s1.port = 6666
a1.sources.s1.channels = c1
a1.channels.c1.type = memory
a1.sinks.k1.type = logger
a1.sinks.k1.channel = c1
运行flume:
执行如下代码,-Dflume.root.logger=DEBUG,console 为的是将日志信息输出在命令台。
flume-ng agent -n a1 -c ./ -f ./flume-sample-20190305.properties -Dflume.root.logger=DEBUG,console
运行疗效:
执行telnet,向端口号输出‘hi’后,控制台输出以下信息,证明flume运行成功。
工作原理解析Flow类型
注意:一个source可以对应多个channel,而sink与channel一般是*敏*感*词*的。
channel与sink*敏*感*词*是因为:
假如一个channel对应多个sink,要考虑并发问题,会促使构架显得很复杂。一个channel对应一个sink后,可以按照sink的目标源的需求急迫性,为各channel分配不同大小的显存。顺序流
多对一聚合
一对多路由
配置
负载均衡
配置
工作流程source开始接收消息调用Channel Proccessor.processorEvent调用Interceptor Chain做event的预处理按照Channel Selector选择channelsink端调用Channel的take方式,获取event
上一张Flume源码类图,可以帮助你们剖析Flume源码。
Source
Channel
Sink
常见应用场景场景一:离线日志搜集
场景描述:
采集服务器的用户访问日志,保存到Hadoop集群总,用于离线的估算与剖析。
Flume方案:
在服务器端配置flume agent, 其中:
场景二:实时日志搜集
场景描述:
采集服务器的系统日志,发送给实时估算引擎进行实时处理。
Flume方案:
在服务器端配置flume agent, 其中:
场景三:系统日志搜集
场景描述:
采集服务器的系统日志,保存到搜索引擎中,用于线上日志查询。
Flume方案:
在服务器端配置flume agent, 其中:
部署构架图
架构图从左至右可分为三层:
采集层、汇总层、存储层。
中间汇总到Avro Source是因为:
当储存层(HDFS,ELK)做升级和维护时,如果没有中间层,势必会在Agent层出现数据的堆积,容易导致线上系统的衰弱。相比于日志的采集来说,线上应用的正常运转更为重要。如果没有汇总层,路由就要配置到每一个Agent。实际生产中,Agent的节点数太可能上百,会给后期的路由维护带来很*敏*感*词*烦。所以选择在汇总层统一配置路由信息。实例演示
我的另一篇博文:《实践:Flume同步信息到HDFS》
日志采集系统的设计要求其他方案Flume与Scribe对比
Flume与Kafka经验分享配置相关构架相关反省将指定目录中不断降低的日志搜集到hdfs中并测试大数据量下的收 集效率由一个agent搜集信息后发给第二个agent, 由第二个agent将信息写 入目的地同一种source源, 同一种source源,根据信息的属性(比如IP地址) 将数据发送到不 同的channel