Flume(日志收集系统)的部署与测试

Flume的部署与测试

Flume是一个分布式、高可靠、高可用的日志收集系统。能够有效的收集、聚合、移动大量的日志。把各种类型的数据源采集汇总到各种类型的目的地,flume有一个口号:“我们不生产数据,我们是数据的搬运工。

官网文档: http://flume.apache.org/FlumeUserGuide.html

相关项目:
相关示例项目:Leek——简易版实时智能选股平台

Flume组件:

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的作用:

可用于实时计算和离线计算的数据源采集工具 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