我是靠谱客的博主 斯文纸鹤,最近开发中收集的这篇文章主要介绍使用flume收集日志,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

flume介绍

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
官网文档:http://flume.apache.org/FlumeUserGuide.html

flume安装

flume依赖于java1.8+,安装flume首先要安装java环境

apt install openjdk-8-jre-headless

然后下载源码包

wget http://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz

解压并移动到想要的目录,此处移动至/opt下

tar -zxvf apache-flume-1.8.0-bin.tar.gz
mv apache-flume-1.8.0-bin /opt/flume-1.8.0

运行以下命令查看版本号验证是否安装成功,正常显示版本号则安装成功

/opt/flume-1.8.0/bin/flume-ng version

flume基础配置

还需要进入到conf目录下在flume-env.sh文件中配置一下flume的JAVA_HOME值。

cd /opt/flume-1.8.0/conf
cp flume-env.sh.template flume-env.sh
vi /opt/flume-1.8.0/conf/flume-env.sh

配置完成之后进入/opt/flume-1.8.0目录执行以下命令测试环境是否配置成功

/opt/flume-1.8.0/bin/flume-ng agent --conf conf --conf-file conf/flume-conf.properties.template --name agent -Dflume.root.logger=INFO,console

flume启动命令

原文:https://blog.csdn.net/qianshangding0708/article/details/48088611

命令

参数描述
help打印帮助信息
agent运行一个Flume Agent
avro-client运行一个Avro Flume 客户端
version显示Flume版本

全局选项

参数描述
–conf,-c 在目录使用配置文件。指定配置文件放在什么目录
–classpath,-C 追加一个classpath
–dryrun,-d不真正运行Agent,而只是打印命令一些信息。
–plugins-path 插件目录列表。默认:$FLUME_HOME/plugins.d
-Dproperty=value设置一个JAVA系统属性值。
-Xproperty=value设置一个JAVA -X的选项。

Agent选项

参数描述
–conf-file,-f 指定配置文件,这个配置文件必须在全局选项的–conf参数定义的目录下。(必填)
–name,-n Agent的名称(必填)
–help,-h帮助

Avro客户端选项

参数描述
–rpcProps,-P 连接参数的配置文件。
–host,-H Event所要发送到的Hostname。
–port,-p Avro Source的端口。
–dirname Avro Source流到达的目录。
–filename,-F Avro Source流到达的文件名。
–headerFile,-R 设置一个JAVA -X的选项。

启动Avro客户端要么指定–rpcProps,要么指定–host和–port。

flume agent配置

flume通过配置文件来指定每个agent的日志采集源(source)、传输方式(channel)和目的地(sink)。一个机器可以运行多个agent,多个机器间的agent也可以互相连接。

source

在我们的应用场景中,最常用的source类型是exec和spooling,这里主要介绍这两个,其余可参考官方文档。
如果要收集docker的日志,可以参考这篇文章:https://blog.csdn.net/yanghua_kobe/article/details/50642601

exec source

官方文档:http://flume.apache.org/FlumeUserGuide.html#exec-source
这个source主要用来监控某个文件新增的log数据。

exec可以通过指定的操作对日志进行读取,使用exec时需要指定shell命令,对日志进行读取,下面给出一个具体的例子:

a1.sources = r1
a1.channels = c1
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /var/log/secure
a1.sources.r1.channels = c1

spooling directory source

官方文档:http://flume.apache.org/FlumeUserGuide.html#spooling-directory-source
这个source主要用来监控某个目录下新增的文件。

spo_dir可以读取文件夹里的日志,使用时指定一个文件夹,可以读取该文件夹中的所有文件,需要注意的是该文件夹中的文件在读取过程中不能修改,同时文件名也不能修改。下面给出一个具体的例子:

agent-1.channels = ch-1
agent-1.sources = src-1
agent-1.sources.src-1.type = spooldir
agent-1.sources.src-1.channels = ch-1
agent-1.sources.src-1.spoolDir = /var/log/apache/flumeSpool
agent-1.sources.src-1.fileHeader = true

avro source

官方文档:http://flume.apache.org/FlumeUserGuide.html#avro-source
这个source主要用来连接两个agent。更详细的参数配置请参考官方文档。
avro可以监听和收集指定端口的日志,使用avro的source需要说明被监听的主机ip和端口号,下面给出一个具体的例子:

a1.sources = r1
a1.channels = c1
a1.sources.r1.type = avro
a1.sources.r1.channels = c1
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 4141

channel

官方文档:http://flume.apache.org/FlumeUserGuide.html#flume-channel-selectors
Flume的channel种类并不多,最常用的是memory channel,下面给出例子:

a1.channels = c1
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 10000
a1.channels.c1.byteCapacityBufferPercentage = 20
a1.channels.c1.byteCapacity = 800000

sink

官方文档:http://flume.apache.org/FlumeUserGuide.html#flume-sinks
在我们的应用场景中,最常用的sink是file roll sink,即将采集到的日志事件写入本地文件中保存起来。另外常用的还有logger sink,一般用于调试。avro sink则是为了连接多个agent服务的,我们的应用场景中暂时还没有用到。

logger sink

官方文档:http://flume.apache.org/FlumeUserGuide.html#logger-sink
logger顾名思义,就是将收集到的日志写到flume的log中,是个十分简单但非常实用的sink。参数配置请参考官方文档。

avro sink

官方文档:http://flume.apache.org/FlumeUserGuide.html#avro-sink
avro可以将接受到的日志发送到指定端口,供级联agent的下一跳收集和接受日志,使用时需要指定目的ip和端口。更详细的参数配置请参考官方文档。例子如下:

a1.channels = c1
a1.sinks = k1
a1.sinks.k1.type = avro
a1.sinks.k1.channel = c1
a1.sinks.k1.hostname = 10.10.10.10
a1.sinks.k1.port = 4545

file roll sink

官方文档:http://flume.apache.org/FlumeUserGuide.html#file-roll-sink
file_roll可以将一定时间内收集到的日志写到一个指定的文件中,具体过程为用户指定一个文件夹和一个周期,然后启动agent,这时该文件夹会产生一个文件将该周期内收集到的日志全部写进该文件内,直到下一个周期再次产生一个新文件继续写入,以此类推,周而复始。更详细的参数配置请参考官方文档。下面给出一个具体的例子:

a1.channels = c1
a1.sinks = k1
a1.sinks.k1.type = file_roll
a1.sinks.k1.channel = c1
a1.sinks.k1.sink.directory = /var/log/flume

最后

以上就是斯文纸鹤为你收集整理的使用flume收集日志的全部内容,希望文章能够帮你解决使用flume收集日志所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部