flume日志收集系统搭建

开源软件 Jenner 11728℃ 0评论

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软件架构的简单设计。这里我们看一张从官网扒的图:

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测试

由于我只有一台机器,所以是启用了不同的端口进行的。配置文件列举如下:

# 负载机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

 

# 日志收集中心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

 

# 日志收集中心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日志收集系统搭建

喜欢 (0)