Flume(日志收集系统)的部署与测试
Flume的部署与测试
Flume是一个分布式、高可靠、高可用的日志收集系统。能够有效的收集、聚合、移动大量的日志。把各种类型的数据源采集汇总到各种类型的目的地,flume有一个口号:“我们不生产数据,我们是数据的搬运工。
官网文档: http://flume.apache.org/FlumeUserGuide.html
相关项目:
相关示例项目:Leek——简易版实时智能选股平台
Flume组件:
Flume 的核心(agent)就是把数据从数据源收集过来,再送到目的地。为了保证高可靠输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地后,删除自己缓存的数据。 Flume : 传输的数据的基本单位是 Event,如果是文本文件,通常是一行记录,这也是事务的基本单位。
- Event : (包含:headers:{} 、body) 从 Source,流向 Channel,再到 Sink,本身为一个 byte 数组。
- Source : 对数据进行收集,分成 transtion 和 event 打入到channel之中。
- Channel : 就像一个管道(队列),接收 Source 的输出,再推送给 Sink 消费。数据直到进入到下一个Channel中或者进入终端才会被删除。即:中转Event临时存储,在 sources 和 sinks之间起一个连接作用 。
- Sink : 取出 Channel 中的数据,然后送给外部源(HDFS、HBase)或者其他 Source。
flume的作用:
可用于实时计算和离线计算的数据源采集工具
1、Flume安装(安装flume前需要先安装JDK环境)
http://mirrors.cnnic.cn/apache/flume/1.6.0/apache-flume-1.6.0-bin.tar.gz tar -xvzf apache-flume-1.6.0-bin.tar.gz mv apache-flume-1.6.0-bin apache-flume-1.6.0
2、环境变量设置
vim /etc/profile export FLUME_HOME=/usr/local/apache-flume-1.6.0 export FLUME_CONF_DIR=$FLUME_HOME/conf export PATH=.:$PATH::$FLUME_HOME/bin source /etc/profile echo $FLUME_HOME
3、Flume配置
cd /usr/local/apache-flume-1.6.0/conf/ cp flume-conf.properties.template flume-conf.properties vim flume-conf.properties
接下来我们要实现如下目的:
B服务器的nginx访问日志传输到A服务器,A服务器将本服务器上的nginx访问日志和B服务器传输过来的日志一起输出到/tmp/flume文件夹下面。
#服务器A的配置: #下面的agent1是代理名称 agent1.sources = s1 s2 agent1.channels = c1 agent1.sinks = k1 #配置数据源source agent1.sources.s1.type = avro agent1.sources.s1.bind= 0.0.0.0 agent1.sources.s1.port= 44444 agent1.sources.s1.channels= c1 agent1.sources.s2.batchSize=1000 agent1.sources.s2.batchTimeout=1000 agent1.sources.s2.type = exec agent1.sources.s2.channels = c1 agent1.sources.s2.command = tail -f /usr/local/nginx/logs/access.log agent1.sources.s2.batchSize=1000 agent1.sources.s2.batchTimeout=1000 # 配置内存 channel agent1.channels.c1.type = memory agent1.channels.c1.capacity = 50000 agent1.channels.c1.transactionCapacity = 10000 # 配置 sinks agent1.sinks.k1.channel = c1 agent1.sinks.k1.type = file_roll agent1.sinks.k1.sink.directory = /tmp/flume #默认值为30,即每30秒生成一个文件 #为0时表示只有一个文件存放数据 agent1.sinks.k1.sink.rollInterval = 0 #设置的越大吞吐能力越好,延时也越大 agent1.sinks.k1.sink.batchSize=100
#服务器B的配置: #下面的agent1是代理名称 agent1.sources = s1 agent1.channels = c1 agent1.sinks = k1 #配置数据源source agent1.sources.s1.type = exec agent1.sources.s1.channels = c1 agent1.sources.s1.command = tail -f /usr/local/nginx/logs/access.log # 配置内存 channel agent1.channels.c1.type = memory agent1.channels.c1.capacity = 10000 agent1.channels.c1.transactionCapacity = 10000 # 配置 sinks # 数据被转换成 Avro Event ,然后发送到指定的服务端口上。 agent1.sinks.k1.channel = c1 agent1.sinks.k1.type = avro agent1.sinks.k1.hostname = 192.168.xx.xxx agent1.sinks.k1.port = 44444 agent1.sinks.k1.batch-size=50
4、依次启动服务
cd /usr/local/apache-flume-1.6.0/ nohup flume-ng agent -n agent1 -c conf -f conf/flume-conf.properties &
5、在A服务器上看整合的日志输出
tail -f /tmp/flume/xxxxxx