flume 采集 springboot log 直接 C V !!!

一直想着抽空整合下 flume 采集 springboot log的案例.现在有空开始干!

说明: springboot应用程序是一个利用 JdbcTemplate 简单查询的案例.

flume 是1.9 的版本,官网可以下载. 安装也简单.

上代码:

1.application.properties

spring.datasource.url=jdbc:mysql://hdp2:3306/bigdata?useUnicode=true&characterEncoding=UTF-8&useSSL=false
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
server.port=9998

2.EventService.java

public interface EventService {
      List<Event> queryData();
}

3. EventServiceImpl.java

@Slf4j
@Service
public class EventServiceImpl implements EventService {
    @Autowired
    private JdbcTemplate template;
    @Override
    public List queryData() {

        List<Map<String, Object>> list = template.queryForList("select * from  clicks");
        log.info("开始查询数据库,时间:{} " ,new Timestamp(System.currentTimeMillis()));
        return list;
    }
}

4.EventController.java

@Slf4j
@RestController
public class EventController {

    @Autowired
    private EventService service;

    @RequestMapping("/get")
    public String getData(){
        List<Event> events = service.queryData();
        log.info("远程访问了接口,时间:{}",new Timestamp(System.currentTimeMillis()));
        return events.toString();
    }
}

 5.pom.xml 文件

<dependency>
    <groupId>org.apache.flume</groupId>
    <artifactId>flume-ng-sdk</artifactId>
    <version>1.9.0</version>
</dependency>
<dependency>
    <groupId>com.teambytes.logback
    </groupId>
    <artifactId>logback-flume-appender_2.11</artifactId>
    <version>0.0.9</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.13</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <version>RELEASE</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.48</version>
</dependency>

7.这里主要就是导入相对应的依赖和 logback.xml的配置,可以参考官网上的配置.

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="true">

    <property name="log-dir" value="log" />
    <property name="log-name" value="logFile" />

    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyy MMM dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L- %msg%n</pattern>
            <!-- 日志编码 -->
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
    </appender>

    <!--name:自己定义,但注意与下面对应 ,class:加载指定类(ch.qos.logback.core.rolling.RollingFileAppender类会将日志输出到>>>指定的文件中),
        patter:指定输出的日志格式 file:指定存放日志的文件(如果无,则自动创建) rollingPolicy:滚动策略>>>每天结束时,都会将该天的日志存为指定的格式的文件
        FileNamePattern:文件的全路径名模板 (注:如果最后结尾是gz或者zip等的话,那么会自动打成相应压缩包)-->
    <appender name="fileAppender"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 把日志文件输出到:项目启动的目录下的log文件夹(无则自动创建)下 -->
        <file>${log-dir}/${log-name}.log</file>
        <!-- 把日志文件输出到:name为logFilePositionDir的property标签指定的位置下 -->
        <!-- <file>${logFilePositionDir}/logFile.log</file> -->
        <!-- 把日志文件输出到:当前磁盘下的log文件夹(无则自动创建)下 -->
        <!-- <file>/log/logFile.log</file> -->
        <rollingPolicy  class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- TimeBasedRollingPolicy策略会将过时的日志,另存到指定的文件中(无该文件则创建) -->
            <!-- 把因为 过时 或 过大  而拆分后的文件也保存到目启动的目录下的log文件夹下  -->
            <fileNamePattern>
                log/logFile.%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <!-- 设置过时时间(单位:<fileNamePattern>标签中%d里最小的时间单位) -->
            <!-- 系统会删除(分离出去了的)过时了的日志文件 -->
            <!-- 本人这里:保存以最后一次日志为准,往前7天以内的日志文件 -->
            <MaxHistory>
                7
            </MaxHistory>
            <!-- 滚动策略可以嵌套;这里嵌套了一个SizeAndTimeBasedFNATP策略,主要目的是: 在每天都会拆分日志的前提下,
               当该天的日志大于规定大小时,也进行拆分并以【%i】进行区分,i从0开始 -->

            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>

        </rollingPolicy>
        <!-- 日志输出格式 -->
        <encoder>
            <pattern>%d{yyy MMM dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%L- %msg%n</pattern>
            <!-- 日志编码 -->
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>

    </appender>

    <!--设置连接flume的配置信息-->
    <appender name="fileAppender" class="com.teambytes.logback.flume.FlumeLogstashV1Appender">
        <flumeAgents>
            hdp1:44444
        </flumeAgents>
        <flumeProperties>
            connect-timeout=4000;
            request-timeout=8000
        </flumeProperties>
        <batchSize>100</batchSize>
        <reportingWindow>1000</reportingWindow>
        <additionalAvroHeaders>
            myHeader = myValue
        </additionalAvroHeaders>
        <application>JustryDeng's Application</application>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - \(%file:%line\) - %message%n%ex</pattern>
        </layout>
    </appender>

    <logger name="com.example.springbootflume" level="info" >
        <appender-ref ref="fileAppender"/>
    </logger>

    <root level="error">
        <appender-ref ref="consoleAppender"/>
    </root>
</configuration>

8.以上编写的应用程序已经整好了,接下来是打成jar上传到服务运行.接着编写运行flume 采集springboot log的conf脚本,为了方便测试输出到 logger ,我这边输出端写成了 .简单的内容如下:

a1.sources=r1
a1.sinks=k1
a1.channels=c1

a1.sources.r1.type=avro
a1.sources.r1.bind=hdp1
a1.sources.r1.port=44444

a1.sinks.k1.type=logger

a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100

a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1

简单讲述下:

type 使用的是 avro 

bind(绑定的地址) hdp1 

port 这个就是采集的端口,通过都是44444,flume中有讲解.

9.当springboot应用程序已经启动.conf 脚本写好了,就可以执行脚本进行采集了.

./flume-ng agent -c /opt/soft/flume/conf   -f /opt/soft/flume/conf/example/springboot-flume-test.conf  --name a1  -Dflume.root.logger=INFO,console

解释参数:

-c conf 指的是flume自身的配置文件所在目录
-f /opt/soft/flume/conf/example/log-netcat.conf 配置方案
-n  a1 指定本次启动agent的名字,与采集方案配置文件中一致
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值