linux-flume1.8收集nginx日志到kafka
简介
Apache Flume是一个分布式、可靠、可用的系统,用于从大量不同的源有效地收集、聚合、移动大量日志数据进行集中式数据存储。
工作流程简介
Flume的核心是Agent,Agent中包含Source、Channel、Sink。Agent是最小的独立运行单位。在Agent中,数据流向为Source->Channel->Sink。
这里我们主要讲下收集nginx日志的几个过程:
nginx产生访问日志;
flume通过tail -F 监控文件增加来收集数据到source,传递给channel;
channel数据通道,接收Source的数据并储存,传递给Sink;
Sink消费Channel中的数据,传递到kafka。
Flume传输的数据的基本单位是Event,Event同时也是事务操作的基本单位。通常传输的日志内容存储在Event中。Event由可选的header和载有数据的byte array构成。
配置示例
下载jdk和apache-flume,jdk可以在oracle官网就可以下载到,apache-flume可以在国内apache镜像源(比如阿里云镜像)里面就有了。
配置好jdk环境,解压apache-flume,目前最新稳定版本是1.8.0
1、设置flume的JAVA_HOME变量
cd apache-flume-1.8.0-bin/conf
cp cp flume-env.sh.template flume-env.sh
echo 'export JAVA_HOME=/opt/jdk' >> flume-env.sh
2、设置flume配置文件
vim agent1.conf
agent.sources.s1.type=exec
#这里执行要运行获取数据的命令
agent.sources.s1.command=tail -F /usr/loca/nginx/logs/access.log
agent.sources.s1.channels=c1
agent.channels.c1.type=memory
agent.channels.c1.capacity=10000
agent.channels.c1.transactionCapacity=100
#设置Kafka接收器
agent.sinks.k1.type= org.apache.flume.sink.kafka.KafkaSink
#设置Kafka的broker地址和端口号
agent.sinks.k1.brokerList=192.168.30.2:9092
#设置Kafka的Topic
agent.sinks.k1.topic=nginx_logs
#设置序列化方式
agent.sinks.k1.serializer.class=kafka.serializer.StringEncoder
agent.sinks.k1.channel=c1
3、启动
./bin/flume-ng agent -n agent -c conf -f conf/agent1.conf -Dflume.root.logger=INFO,console
kafka环境搭建可以参照这个文章:CentOS-尝试部署kafka集群