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

Posted slvher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日志收集系统Flume调研笔记第2篇 - Flume配置及使用实例相关的知识,希望对你有一定的参考价值。

上篇笔记对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 =========================


以上是关于日志收集系统Flume调研笔记第2篇 - Flume配置及使用实例的主要内容,如果未能解决你的问题,请参考以下文章

日志抽取框架 flume 简介与安装配置

Flume监控系统源码研究

Flume环境部署和配置详解及案例大全

Flume 实战,将多台机器日志直接收集到 Kafka

Flume入门

Flume简介及使用