springboot集成flume实现多系统日志收集
本次demo实现的功能:使用flume框架收集目标工程的日志信息,并发送到kafka,最终完成kafka的消费
1、配置工程
配置logback:
<!-- 此处为flume日志采集的配置 --> <appender name="flumeTest" class="com.teambytes.logback.flume.FlumeLogstashV1Appender"> <flumeAgents> <!-- 配置flume所在服务器的ip地址以及端口号。如果配置了主机名映射,可以填写主机名 --> localhost:45551 </flumeAgents> <flumeProperties> connect-timeout=4000; request-timeout=8000 </flumeProperties> <batchSize>1</batchSize> <reportingWindow>1</reportingWindow> <additionalAvroHeaders> myHeader=myValue </additionalAvroHeaders> <application>flume-demo</application> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%p %c#%M %d{yyyy-MM-dd HH:mm:ss} %m%n</pattern> </layout> </appender> <logger name="com" level="info"> <appender-ref ref="flumeTest"/> </logger>
编写日志测试类:
@RestController @Component @EnableScheduling @Slf4j public class FlumeTest { /** * flume测试 */ //@RequestMapping("/") @Scheduled(fixedRate = 5, timeUnit = TimeUnit.SECONDS) public void batchReadHfyData() { long startTime = System.nanoTime(); log.info("-------打印测试日志-------:{}", startTime); } }
编写kafka消费者:
@Configuration public class FlumeConsumer { @KafkaListener(topics = "test", groupId = "flume-consumer") public void flume(String msg) { System.out.println("接收flume输出的消息:" + msg); } }
2、配置flume
从flume官网下载安装包:
a:解压flume
b:修改conf/flume-env.sh文件,没有就新建。
c:添加flume的bin目录到系统环境变量中
d:验证是否安装成功,flume-ng version
3、配置kafka并启动(参考网上教学)
4、启动flume
a:修改配置文件conf/flume-env.sh文件
b:新建并编辑example.conf文件
example.conf文件位置:
example.conf文件内容:
# 定义这个 agent 中各组件的名字 a1.sources = r1 a1.sinks = k1 a1.channels = c1 # 描述和配置 source 组件:r1 a1.sources.r1.type = avro a1.sources.r1.bind = 0.0.0.0 a1.sources.r1.port = 45551 # 描述和配置 channel 组件,此处使用是内存缓存的方式 a1.channels.c1.type = memory # 默认该通道中最大的可以存储的 event 数量 a1.channels.c1.capacity = 10000 # 每次最大可以从 source 中拿到或者送到 sink 中的 event 数量 a1.channels.c1.transactionCapacity = 1000 # 配置Sink组件,将接收数据输出到对应kafka a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink a1.sinks.k1.kafka.bootstrap.servers = http://localhost:9092 a1.sinks.k1.kafka.topic = test a1.sinks.k1.kafka.flumeBatchSize = 20 a1.sinks.k1.kafka.producer.acks = 1 a1.sinks.k1.kafka.producer.linger.ms = 1 a1.sinks.k1.kafka.producer.compression.type = snappy # 描述和配置 source channel sink 之间的连接关系 a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1
c: 基于example.conf文件启动:flume-ng agent --conf conf --conf-file example.conf --name a1
5、将多个springboot应用产生的日志通过 flume 发送到 kafka中,并消费