日志收集系统Flume调研笔记第2篇 - Flume配置及使用实例

12 篇文章 0 订阅
这篇博客详细介绍了Flume的配置和使用实例,包括选择Spooling Directory Source处理nginx的access_log,使用memory channel保证数据不丢失,以及file_roll sink用于调试。同时,文中提到了Flume的监控机制,尽管还在完善中,但可以通过-D参数指定监控服务器。
摘要由CSDN通过智能技术生成

上篇笔记对Flume的使用场景和系统架构做了介绍,本篇笔记以实例说明Flume的配置方法。下面开始正文。

1. Flume使用实例
1.1 配置

Flume agent的3个组件及其拓扑关系是在配置文件中指定的,总的原则是必须列出source/channel/sink的name/type等重要的配置项,并通过channel将source(s)和sink(s)连接起来,此外,1个source可以指定多个channel,而1个sink只能接收来自1个channel的数据
这里给出的是部署1套含1个source、1个channel、1个sink的Flume agent的配置示例,更多的配置规则可以参考Flume User Guide的Configuration部分。
假设外部数据源是nginx的access_log,为保证数据不丢失(通过ExecSource执行tail –F /path/to/access_log更简单,但在flume-agent进程异常时会丢失数据),我们选用Spooling Directory Source类型的source,选用memory类型的channel,选用file_roll类型的sink以便调试。
此外,我们借助logrotate工具定时切分nginx的access_log并将切分后的文件移入spooling directory source目录,以便Flume的Source检测并处理该文件。
满足上述需求的配置文件如下所示。

agent_test.sources = spool-src
agent_test.channels = mem-chan
agent_test.sinks = logger-sink

agent_test.sources.spool-src.type = spooldir
agent_test.sources.spool-src.channels = mem-chan
agent_test.sources.spool-src.spoolDir = /home/slvher/tools/nginx-logs.bak

agent_test.sinks.logger-sink.type = file_roll
agent_test.sinks.logger-sink.channel = mem-chan
agent_test.sinks.logger-sink.sink.directory = /home/slvher/tools/flume-1.5.2/apache-flume-1.5.2-bin/flume_sink.dump
agent_test.sinks.logger-sink.sink.rollInterval = 3600

agent_test.channels.mem-chan.type = memory
agent_test.channels.mem-chan.capacity = 10000
备注:logrotate工具的用法之前的 一篇笔记提到过,这里略过。

1.2 测试
配置完成后,启动Flume,参考命令如下:

export CLASSPATH=/home/slvher/tools/flume-1.5.2/apache-flume-1.5.2-bin/lib/*.jar:/home/slvher/tools/hadoop-client/java6/lib/*.jar
nohup ./bin/flume-ng agent -n agent_test -c conf -f conf/flume-conf.properties -f conf/log4j.properties > logs/start.log 2>&1 &
注意:如果在通过./bin/flume-ng脚本启动Flume时遇到如下shell语法错误
bin/flume-ng: line 102: syntax error in conditional expression: unexpected token `('
bin/flume-ng: line 102: syntax error near `slf4j-(a'
bin/flume-ng: line 102: `if [[ $PIECE =~ slf4j-(api|log4j12).*\.jar ]]; then'
则需要修改该提示行处的if条件表达式( 将正则表达式用双引号括起来),即将原来的
if [[ $PIECE =~ slf4j-(api|log4j12).*\.jar ]]; then
修改为
if [[ $PIECE =~ "slf4j-(api|log4j12).*\.jar " ]]; then
启动完成后,可以查看logs/flume.log日志,如果没有WARN或ERROR,则表明Flume启动成功。
我们将logrotate对nginx access_log日志的切分动作设置为周期5minutes的定时任务后,每隔5分钟,nginx-logs.bak目录会生成1个切分文件,而这个文件会被Flume的Source定时扫描并处理,处理完成后,会为原文件追加” .COMPLETED”后缀。
由于我们对sink配置的类型是file_roll,所以,日志通过source-channel-sink传递后,会dump到flume_sink.dump目录下,可在该目录下验证dump是否成功。
在实际业务中,可以根据需求将sink的类型配置为hdfs或其它存储系统对应的sink,此时,sink会将event data写入对应的存储系统中,这里不再赘述。

2. 监控
根据Flume文档关于Monitoring的说明,其监控机制仍在完善中,目前可用的机制是在启动Flume agent时通过-D指定监控的server:port,细节可去查看文档。

【参考资料】
1. Flume User Guide - Configuration
2. Flume User Guide - Monitoring

========================= EOF =========================


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值