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>
View Code

编写日志测试类:

@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
View Code

 

c: 基于example.conf文件启动:flume-ng agent --conf conf --conf-file example.conf --name a1

5、将多个springboot应用产生的日志通过 flume 发送到 kafka中,并消费

 

源码:https://gitee.com/caesarthegreat/flume-demo.git

posted @ 2023-02-23 18:28  Caesar_the_great  阅读(590)  评论(0编辑  收藏  举报