Flume实时采集日志到Kafka(极简版)

背景:
由于项目采用微服务架构,业务日志文件数量较多,我做了个简单的日志监控服务,先在此分享下日志采集的简单步骤,没有任何花里胡哨 ~(ps:一切数据到了 kafka就非常好解决了!)


一、Flume安装

Flume的安装使用可以说非常简单,直接进官网:http://flume.apache.org/

在这里插入图片描述
最新是1.9.0版本,我们选择1.8.0版本下载。
在这里插入图片描述
在这里插入图片描述
然后在Linux下解压:
在这里插入图片描述
在这里插入图片描述
配置用户环境变量:(如果有root权限可以配置在/etc/profile

vim ~/.bashrc

在末尾添加路径:

FLUME_HOME=/home/dev/flume/flume-1.8.0
PATH=$PATH:$FLUME_HOME/bin

source使其生效:

source ~/.bashrc

二、确定日志采集策略

需要根据我们的日志类型来确定最佳策略。

我们项目的业务日志是通过Logback生成,日志形式如下所示:
在这里插入图片描述
根据日期规则进行滚动:
当天的日志文件名为stdout.log,过了凌晨12点即把stdout.log改名为stdout.log.昨天日期.log,然后日志重新输出在新的stdout.log。所以我们只需要采集名为stdout.log的文件即可。

一般Flume采集日志source有两种方式:

### Flume日志数据传输到 Kafka 的最佳实践和示例配置 #### 配置概述 Flume 是一个分布式、可靠且高可用的日志收集工具,能够高效地将各种来源的数据传输至指定的目标位置。当需要将日志数据通过 Flume 传输到 Kafka 时,可以通过以下方式完成配置。 --- #### 示例配置文件 `flume-kafka.conf` 以下是 Flume 配置文件的一个典型示例: ```properties # 定义 agent 中的 source、channel 和 sink agent.sources = syslogSource agent.channels = memoryChannel kafkaChannel agent.sinks = hdfsSink kafkaSink # Syslog Source 配置 agent.sources.syslogSource.type = net agent.sources.syslogSource.bind = 0.0.0.0 agent.sources.syslogSource.port = 514 agent.sources.syslogSource.interceptors = i1 agent.sources.syslogSource.interceptors.i1.type = host agent.sources.syslogSource.interceptors.i1.preserveExisting = false agent.sources.syslogSource.interceptors.i1.hostHeader = hostname # Memory Channel 配置 agent.channels.memoryChannel.type = memory agent.channels.memoryChannel.capacity = 1000 agent.channels.memoryChannel.transactionCapacity = 100 # Kafka Channel 配置 agent.channels.kafkaChannel.type = org.apache.flume.channel.kafka.KafkaChannel agent.channels.kafkaChannel.kafka.bootstrap.servers = localhost:9092 agent.channels.kafkaChannel.kafka.topic = flume_topic agent.channels.kafkaChannel.parseAsFlumeEvent = true agent.channels.kafkaChannel.kafka.consumer.group.id = flume_group # HDFS Sink 配置(可选) agent.sinks.hdfsSink.type = hdfs agent.sinks.hdfsSink.hdfs.path = /myflume/syslog/%Y%m%d agent.sinks.hdfsSink.hdfs.fileType = DataStream agent.sinks.hdfsSink.hdfs.writeFormat = Text agent.sinks.hdfsSink.hdfs.rollInterval = 60 # Kafka Sink 配置 agent.sinks.kafkaSink.type = org.apache.flume.sink.kafka.KafkaSink agent.sinks.kafkaSink.brokerList = localhost:9092 agent.sinks.kafkaSink.topic = flume_topic agent.sinks.kafkaSink.batchSize = 20 agent.sinks.kafkaSink.requiredAcks = 1 # 绑定 source 到 channel agent.sources.syslogSource.channels = memoryChannel kafkaChannel # 绑定 sink 到 channel agent.sinks.hdfsSink.channel = memoryChannel agent.sinks.kafkaSink.channel = kafkaChannel ``` --- #### 关键点解释 1. **Syslog Source** 使用 `net` 类型的 source 来捕获来自网络的 syslog 数据,并绑定到特定端口(如 514)。此部分还包含了拦截器配置,用于提取主机名或其他元数据[^1]。 2. **Memory Channel** 内存类型的 channel 提供了一种轻量级的临时存储机制,适合快速处理场景。其容量和事务能力可以根据实际需求调整[^1]。 3. **Kafka Channel** 如果希望直接利用 Kafka 进行事件传递,则可以选择 Kafka Channel。这种方式允许 Flume 更加紧密地集成 Kafka 生态系统[^4]。 4. **HDFS Sink** 对于长期保存的需求,可以设置 HDFS Sink 将数据写入 Hadoop 文件系统中的指定路径[^1]。 5. **Kafka Sink** 此组件负责将数据推送到 Kafka 主题中。需提供 broker 地址以及目标主题名称等参数[^2]。 --- #### 启动命令 启动 Flume Agent 并加载上述配置文件: ```bash $ bin/flume-ng agent \ --conf conf/ \ --name agent \ --conf-file /data/scripts/syslog_mem_hdfskafka.conf \ -Dflume.root.logger=INFO,console ``` 验证 Kafka 是否正常接收消息: ```bash $ ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic flume_topic --from-beginning ``` --- #### 注意事项 - 确保 Kafka Broker 已经正确运行并开放了相应的服务接口[^3]。 - 根据流量大小合理规划各 component 的缓冲区大小与并发性能指标[^4]。 - 测试阶段建议开启调试模式以便及时发现潜在问题。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值