linux-flume1.8收集nginx日志到kafka

简介

Apache Flume是一个分布式、可靠、可用的系统,用于从大量不同的源有效地收集、聚合、移动大量日志数据进行集中式数据存储。

linux-flume1.8收集nginx日志到kafka

工作流程简介

Flume的核心是Agent,Agent中包含Source、Channel、Sink。Agent是最小的独立运行单位。在Agent中,数据流向为Source->Channel->Sink。

linux-flume1.8收集nginx日志到kafka

这里我们主要讲下收集nginx日志的几个过程:

  1. nginx产生访问日志;

  2. flume通过tail -F 监控文件增加来收集数据到source,传递给channel;

  3. channel数据通道,接收Source的数据并储存,传递给Sink;

  4. Sink消费Channel中的数据,传递到kafka。

Flume传输的数据的基本单位是Event,Event同时也是事务操作的基本单位。通常传输的日志内容存储在Event中。Event由可选的header和载有数据的byte array构成。

linux-flume1.8收集nginx日志到kafka

配置示例

下载jdk和apache-flume,jdk可以在oracle官网就可以下载到,apache-flume可以在国内apache镜像源(比如阿里云镜像)里面就有了。

配置好jdk环境,解压apache-flume,目前最新稳定版本是1.8.0

linux-flume1.8收集nginx日志到kafka

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

linux-flume1.8收集nginx日志到kafka

3、启动

./bin/flume-ng agent -n agent -c conf -f conf/agent1.conf -Dflume.root.logger=INFO,console

kafka环境搭建可以参照这个文章:CentOS-尝试部署kafka集群

linux-flume1.8收集nginx日志到kafka

相关推荐