一、环境及软件要求
二、安装
(注:以下安装过程以 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.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
复制代码
e. 测试
source /etc/profile
java -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.properties
cp flume-env.ps1.template flume-env.ps1
cp 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-source
exec-memory-avro.sinks = avro-sink
exec-memory-avro.channels = memory-channel
# Describe/configure the source
# 配置 source 的读取类型,本次使用持续读取日志文件写入内容的采集方式
# 其他如监听目录等,请自行查找
exec-memory-avro.sources.exec-source.type = exec
exec-memory-avro.sources.exec-source.command = tail -F /usr/local/nginx/logs/access.log
exec-memory-avro.sources.exec-source.shell = /bin/sh -c
# Describe the sink
# 配置 sink 的输出指向
# type 为网络传输类型的固定参数
# hostname 为目标接收机器的 IP 地址
# port 为网络传输使用的端口号
exec-memory-avro.sinks.avro-sink.type = avro
exec-memory-avro.sinks.avro-sink.hostname = 172.17.0.3
exec-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-channel
exec-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-source
avro-memory-logger.sinks = logger-sink
avro-memory-logger.channels = memory-channel
# Describe/configure the source
# 配置采集模式为监听主机端口,与发送端的 sink 指向对应
avro-memory-logger.sources.avro-source.type = avro
avro-memory-logger.sources.avro-source.bind = 172.17.0.3
avro-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_roll
avro-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-channel
avro-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 使用的配置文件目录,可简写为 -c
d. --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 尚在学习,方案略显笨拙,更好更详细的配置方式可以继续搜索更多码友的信息。
学无止境,继续努力!
评论