概述
http://www.huyanping.cn/flume%E6%97%A5%E5%BF%97%E6%94%B6%E9%9B%86%E7%B3%BB%E7%BB%9F%E6%90%AD%E5%BB%BA/
flume原理简介
flume是Apache的一款开源日志收集软件。在flume中,主要有三个重要的角色:source、channel和sink。source负责收集日志,日志可以是来自任何地方,例如socket,本地文件等等。sink负责将收集来的日志处理掉,处理的方法同样可以是多种多样的,例如写入HDFS,或者在本地文件系统中进行持久化。二channel则是负责source和sink之间的通信的,通信方式最常用的主要有内存管道和文件管道。这样设计的一个好处就是能够让每个角色做到单一职责,source只负责收集,sink只负责处理,而channel只负责通信。
flume提供了多种多样的sink、channel和sink,你可以通过简单的修改配置文件的方式,实现不同sink、channel和sink的组合。甚至你可以在一个节点设置多个channel和sink,将一个日志源发送给多个处理节点。
flume负载均衡原理
flume的负载均衡设计非常简单,简单到你只需要修改几行配置即可实现。这得益于flume软件架构的简单设计。这里我们看一张从官网扒的图:
这里我们看到在webserver的前端,有一个consolidation,我们可以称之为controller,它也是一个flume节点,与其他webserver节点不同的是,他的source是webserver,他的sink是HDFSH或其他sink。webserver的sink与controller的source使用arvo rfc进行通信。
但是这样依然解决不了负载均衡的问题,到目前为止,我们只有一台controller。
别急,还记得上面说flume支持使用多个channel和sink,这里我们可以在webserver上部署多个sink,flume支持使用轮询、随机调度的方式使用sink,这样我们通过差异化sink的配置,就能够实现日志上传到不同的机器。当controller发生宕机时,webserver上的flume会自动尝试其他sink继续上传。
flume安装
操作系统:centos6.4
首先需要安装jdk1.6以上版本,我装的是1.8最新版,运行没发现什么问题。然后在官网下载flume,安装官网的安装方法进行安装即可,同时官网提供了一套测试安装是否成功的方法。
flume测试
由于我只有一台机器,所以是启用了不同的端口进行的。配置文件列举如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# 负载机flume client配置
# 组件名称配置
client.sources = source_client
client.sinks = sink_client sink_client_bak
client.channels = channel_client
# 日志源组件配置(获取44444端口数据)
#client.sources.source_client.type = netcat
#client.sources.source_client.bind = 127.0.0.1
#client.sources.source_client.port = 44444
# 日志源组件配置(监听目录下新增文件)
client.sources.source_client.
type
= spooldir
client.sources.source_client.channels = channel_client
client.sources.source_client.spoolDir =
/www/statistics
.huyanping.cn
/logs/blog_log/queue/20150312
client.sources.source_client.fileHeader =
true
client.sources.source_client.fileHeaderKey =
true
client.sources.source_client.basenameHeader =
true
client.sources.source_client.basenameHeaderKey =
true
# sink组件组配置(用于负载均衡配置)
client.sinkgroups = sink_group
client.sinkgroups.sink_group.sinks = sink_client sink_client_bak
client.sinkgroups.sink_group.processor.
type
= load_balance
client.sinkgroups.sink_group.processor.backoff =
true
client.sinkgroups.sink_group.processor.selector = random
# sink组件配置(用于将日志信息持久化或发送给其他服务,注意两个sink访问的hosts或port是不同的)
client.sinks.sink_client.
type
= avro
client.sinks.sink_client.channel = channel_client
client.sinks.sink_client.
hostname
= 127.0.0.1
client.sinks.sink_client.port = 4141
# sink组件配置(用于负载均衡配置)
client.sinks.sink_client_bak.
type
= avro
client.sinks.sink_client_bak.channel = channel_client
client.sinks.sink_client_bak.
hostname
= 127.0.0.1
client.sinks.sink_client_bak.port = 4142
# 内存管道设置
#client.channels.channel_client.type = memory
#client.channels.channel_client.capacity = 1000
#client.channels.channel_client.transactionCapacity = 100
# 文件管道设置
client.channels.channel_client.
type
=
file
client.channels.channel_client.checkpointDir =
/data/tmp/checkpoint
client.channels.channel_client.dataDirs =
/data/tmp
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# 日志收集中心flume controller 配置
# 组件名称配置
master.sources = source_master
master.sinks = sink_master filesystem_sink
master.channels = channel_master filesystem_channel
# 日志源组件配置(两个channel,分别用于本地持久化和其他用途,例如写入HDFS,或者logger调试)
master.sources.source_master.
type
= avro
master.sources.source_master.channels = channel_master filesystem_channel
master.sources.source_master.bind = 127.0.0.1
master.sources.source_master.port = 4141
# sink组件配置
master.sinks.sink_master.
type
= logger
master.sinks.sink_master.channel = channel_master
# 内存管道配置
#master.channels.channel_master.type = memory
#master.channels.channel_master.capacity = 1000
#master.channels.channel_master.transactionCapacity = 100
# 文件管道配置(其他用途)
master.channels.channel_master.
type
=
file
master.channels.channel_master.checkpointDir =
/data/master/tmp/checkpoint
master.channels.channel_master.dataDirs =
/data/master/tmp
# 文件管道配置(本地文件系统持久化)
master.channels.filesystem_channel.
type
=
file
master.channels.filesystem_channel.checkpointDir =
/data/filesystem/tmp/checkpoint
master.channels.filesystem_channel.dataDirs =
/data/filesystem/tmp
# 本地文件系统sink组件配置
master.sinks.filesystem_sink.
type
= file_roll
master.sinks.filesystem_sink.channel = filesystem_channel
master.sinks.filesystem_sink.serializer = TEXT
master.sinks.filesystem_sink.sink.directory =
/data/master/back_log
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# 日志收集中心flume controller back配置
# 组件名称配置
master.sources = source_master
master.sinks = sink_master
master.channels = channel_master
# 日志源组件配置
master.sources.source_master.
type
= avro
master.sources.source_master.channels = channel_master
master.sources.source_master.bind = 127.0.0.1
master.sources.source_master.port = 4142
# sink组件配置
master.sinks.sink_master.
type
= logger
master.sinks.sink_master.channel = channel_master
# 内存管道配置
#master.channels.channel_master.type = memory
#master.channels.channel_master.capacity = 1000
#master.channels.channel_master.transactionCapacity = 100
# 文件管道配置
master.channels.channel_master.
type
=
file
master.channels.channel_master.checkpointDir =
/data/master_bak/tmp/checkpoint
master.channels.channel_master.dataDirs =
/data/master_bak/tmp
|
最后
以上就是温婉天空为你收集整理的FLUME日志收集系统搭建的全部内容,希望文章能够帮你解决FLUME日志收集系统搭建所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复