写点什么

Apache-Flume 的安装及简单应用

用户头像
慢慢de
关注
发布于: 2021 年 04 月 08 日

一、环境及软件要求

  • java >= 1.8

  • Flume >= 1.9

二、安装

(注:以下安装过程以 centOS7 为例,使用的 Docker 镜像,挂载目录自定)

1. jdk1.8

(1) 软件源:

a. 官方资源:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

b. 网盘资源(1.8):https://pan.baidu.com/s/1alUahJ6aVS9qKaXqJ43kAw ,提取码:9nk5

(2) 安装

a. 将压缩包拷贝到 /usr/local/目录(目录自选)


cp /home/soft/jdk-8u202-linux-x64.tar /usr/local/
复制代码


b. 解压缩


tar -zxvf jdk-8u202-linux-x64.tar
复制代码


c. 重命名文件夹(自选)


mv jdk-8u202-linux-x64 jdk1.8
复制代码


d. 修改 /etc/profile ,添加 jdk1.8 环境变量


vim /etc/profile// 在文档最后假如如下内容:export JAVA_HOME=/usr/local/jdk1.8export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport  PATH=${JAVA_HOME}/bin:$PATH
复制代码


e. 测试


source /etc/profilejava -version
复制代码


如果正常打印 java 版本信息即成功

2. 安装 Apache-Flume

(1) 软件源

a. 官方资源:http://flume.apache.org/download.html

b. 网盘资源(1.9):https://pan.baidu.com/s/1toE16XVqB6Zjue5uWbcOYA ,提取码:7pl0

(2) 安装

a. 将压缩包拷贝到 /usr/local/目录(目录自选)


cp /home/soft/apache-flume-1.9.0-bin.tar.gz /usr/local/
复制代码


b. 解压缩


tar -zxvf apache-flume-1.9.0-bin.tar.gz
复制代码


c. 重命名文件夹(自选)


mv apache-flume-1.9.0-bin flume
复制代码


d. 配置 flume


cd /usr/local/flume/conf
cp flume-conf.properties.template flume-conf.propertiescp flume-env.ps1.template flume-env.ps1cp flume-env.sh.template flume-env.sh
vim flume-env.sh// 去掉 JAVA_HOME 参数的注释,并将值改为jdk1.8安装目录,改后如下export JAVA_HOME=/usr/local/jdk1.8
复制代码

3. 日志采集示例

(1) 采集 a 服务的 nginx access.log ,传输到 b 服务并存储到 b 服务本地

a. 进入 a 服务,配置 a 服务日志采集 agent

在 a 服务的 flume/conf/ 目录下创建 exec-memory-avro.conf 文件,并写入如下内容:


# Name the components on this agent# 设置该 flume agent 的相关属性名称,可自定义# agent 名称与配置文件的文件名一致exec-memory-avro.sources = exec-sourceexec-memory-avro.sinks = avro-sinkexec-memory-avro.channels = memory-channel
# Describe/configure the source# 配置 source 的读取类型,本次使用持续读取日志文件写入内容的采集方式# 其他如监听目录等,请自行查找exec-memory-avro.sources.exec-source.type = execexec-memory-avro.sources.exec-source.command = tail -F /usr/local/nginx/logs/access.logexec-memory-avro.sources.exec-source.shell = /bin/sh -c
# Describe the sink# 配置 sink 的输出指向# type 为网络传输类型的固定参数# hostname 为目标接收机器的 IP 地址# port 为网络传输使用的端口号exec-memory-avro.sinks.avro-sink.type = avroexec-memory-avro.sinks.avro-sink.hostname = 172.17.0.3exec-memory-avro.sinks.avro-sink.port = 8866

# Use a channel which buffers events in memory# 设置通道采用的方式,本次使用内存,其他形式如 file 模式请自行查找exec-memory-avro.channels.memory-channel.type = memory#exec-memory-avro.channels.memory-channel.capacity = 1000#exec-memory-avro.channels.memory-channel.transactionCapacity = 100
# Bind the source and sink to the channel# 设置 source 和 sink 的关联通道exec-memory-avro.sources.exec-source.channels = memory-channelexec-memory-avro.sinks.avro-sink.channel = memory-channel
复制代码


b. 进入 b 服务,配置 b 服务监听及输出 agent

在 b 服务的 flume/conf/ 目录下创建 avro-memory-logger.conf 文件,并写入如下内容:


# Name the components on this agent# 设置该 agent 属性名称,可自定义# agent 名称与配置文件的文件名保持一致avro-memory-logger.sources = avro-sourceavro-memory-logger.sinks = logger-sinkavro-memory-logger.channels = memory-channel
# Describe/configure the source# 配置采集模式为监听主机端口,与发送端的 sink 指向对应avro-memory-logger.sources.avro-source.type = avroavro-memory-logger.sources.avro-source.bind = 172.17.0.3avro-memory-logger.sources.avro-source.port = 8866

# Describe the sink# shell 窗口打印不存储模式:avro-memory-logger.sinks.logger-sink.type = logger# 本次采用写入本地文件的模式,其他如写入 kafka、网络传输、HDFS等,请自行查找配置avro-memory-logger.sinks.logger-sink.type = file_rollavro-memory-logger.sinks.logger-sink.sink.directory=/var/log/flume
# Use a channel which buffers events in memory# 使用内存通道avro-memory-logger.channels.memory-channel.type = memory#avro-memory-logger.channels.memory-channel.capacity = 1000#avro-memory-logger.channels.memory-channel.transactionCapacity = 100
# Bind the source and sink to the channel# 设置 source 和 sink 的关联通道avro-memory-logger.sources.avro-source.channels = memory-channelavro-memory-logger.sinks.logger-sink.channel = memory-channel
复制代码


(2) 启动日志采集流程

在 a 服务中操作


cd /usr/local/flume
./bin/flume-ng agent --conf conf/ --conf-file conf/exec-memory-avro.conf --name exec-memory-avro -Dflume.root.logger=INFO,console// 参数说明/*a. 必须使用 flume-ng 命令b. agent 为固定参数c. --conf,设置 agent 使用的配置文件目录,可简写为 -cd. --conf-file,设置 agent 使用哪一个配置文件(即运行哪一个 agent)e. --name,设置 agent 名称,此处建议与配置文件名一致,后期易区分*/
复制代码


此时会持续出现错误提醒,因为 b 服务监听服务还未运行

在 b 服务中操作


cd /usr/local/flume
./bin/flume-ng agent --conf conf/ --conf-file conf/avro-memory-logger.conf --name avro-memory-logger -Dflume.root.logger=INFO,console// 参数说明见上边 a 服务说明
复制代码


b 服务监听 agent 运行后,可以看到 a 服务的 shell 窗口会停止打印异常信息。

访问 a 服务的 web 项目或者直接向 a 服务的 access.log 写入信息,可以在 b 服务指定的输出目录看到接收并存储的日志。

需要注意的是,采集和传输随是及时采集,但 agent 大概是一分钟同步一次内容,所以 a 服务的采集到 b 服务的接收存储可能会存在一分钟内的时间差。


(3) 实施方案说明

类型一:采集当前运行的多个服务器的日志,用一个服务接收处理

可以直接复制上面 a 服务的采集器直接部署到各个服务使用(前提是每个服务都安装 jdk1.8 和 flume)

类型二:采集当前运行的多个服务器日志,在日志服务器分别存储

复制上边 b 服务的 agent 配置文件,在 b 服务中设置 n 个 agent,使用不同名称和端口号

将 a 服务的采集器 .conf 复制到需要采集日志的服务器,各自修改为想要推向的接收器端口


说明:flume 提供更多的配置,比如监听日志目录时,正则匹配需要执行采集的日志名称;匹配含有指定内容的日志等等。


刚刚接触 flume 尚在学习,方案略显笨拙,更好更详细的配置方式可以继续搜索更多码友的信息。


学无止境,继续努力!

用户头像

慢慢de

关注

唯有变化是永恒。 2019.03.20 加入

把更多的精力放到更重要的事情上。

评论

发布
暂无评论
Apache-Flume的安装及简单应用