美文网首页java架构框架
springboot + elk第四篇:springboot整合

springboot + elk第四篇:springboot整合

作者: Torture | 来源:发表于2021-05-09 02:58 被阅读0次

    1.搭建springboot工程,应该没人不会搭吧,此步骤省略

    2.添加相关依赖,我用的gradle

    //变量配置,用来定义版本号
    ext {
        set('springBootVersion', "2.3.2.RELEASE")
        set('lombokVersion', "1.18.12")
        set('logstashVersion', "6.6")
    }
    
    dependencies {
        // logstash日志收集
        implementation group: 'net.logstash.logback', name: 'logstash-logback-encoder', version: "${logstashVersion}"
        //web依赖
        compile 'org.springframework.boot:spring-boot-starter-web'
        //除了用来生成getter,setter,还用来使用@Slf4j注解
        compile "org.projectlombok:lombok:${lombokVersion}"
        annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
    }
    

    spring-boot-starter-web依赖说明:
    主要是因为web依赖中包含 spring-boot-starter-logging
    项目中正好需要使用web,就只导了web,如果不需要web依赖,则需要导入spring-boot-starter-logging

    3.项目resourses目录下添加logback.xml配置文件,配置内容如下,注意修改logstash地址

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="false">
        <!--获取springboot的yml配置信息-->
        <springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="default"/>
        <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
        <property name="LOG_HOME" value="/home"/>
        <!--输出到控制台-->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
            </filter>
            <withJansi>false</withJansi>
            <encoder>
                <!--<pattern>%d %p (%file:%line\)- %m%n</pattern>-->
                <!--格式化输出:%d:表示日期    %thread:表示线程名     %-5level:级别从左显示5个字符宽度  %msg:日志消息    %n:是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) -- %boldMagenta([%thread]) %boldCyan(%logger) : %msg%n</pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <!--  日志发送至logstash  -->
        <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!-- logstash的服务器地址和通信端口 -->
            <destination>192.168.81.120:5043</destination>
            <!-- encoder is required -->
            <encoder class="net.logstash.logback.encoder.LogstashEncoder">
                <!-- 在elasticsearch的index中追加applicationName字段  -->
                <customFields>{"applicationName":"${applicationName}"}</customFields>
            </encoder>
        </appender>
    
        <!-- 按照每天生成日志文件 -->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--日志文件输出的文件名-->
                <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
                <!--日志文件保留天数-->
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </encoder>
            <!--日志文件最大的大小-->
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
    
        <!-- 日志输出级别 -->
        <root level="INFO">
            <appender-ref ref="logstash"/>
            <appender-ref ref="console"/>
        </root>
    </configuration>
    

    xml的关键在于logstash的appender,和root节点使用哪一个appender

    <!-- 如果需要使用application.yml配置logstash的服务器地址,则使用如下方式配置 -->
    <springProperty scope="context" name="logstashSrvAddr" source="logstash.server.addr" defaultValue="default"/>
    
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
      <!-- logstash的服务器地址和通信端口 -->
      <destination>${logstashSrvAddr}</destination>
      <!-- encoder is required -->
      <encoder class="net.logstash.logback.encoder.LogstashEncoder">
        <!-- 在elasticsearch的index中追加applicationName字段  -->
        <customFields>{"applicationName":"${applicationName}"}</customFields>
      </encoder>
    </appender>
    
    

    4.关键配置信息已经全部配置完成,接下来编写一个controller测试一下

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author Torture
     * @description 测试elk
     */
    @RestController
    @Slf4j
    public class LogController {
    
        @GetMapping("/log")
        public void log(){
            //使用lombok的@Slf4j注解之后,可以直接使用下面方式直接打印日志,无须使用工厂获得logger对象
            log.info("springboot + elk 日志测试......");
        }
    }
    

    5.启动springboot

    启动springboot2.png

    6.配置一下kibana的索引模式

    配置过程:


    kibana创建索引模式1.png kibana创建索引模式2.png kibana创建索引模式3.png

    7.使用postman进行日志测试

    info日志请求.png

    idea控制台输出结果:


    idea控制台输出info日志.png

    在kibana中我们可以发现,日志已经成功展示出来了!


    logstash查看日志列表.png

    下面我们再测试一下error日志下,logstash是怎么展示的!

    测试类:

    import com.zxj.qdzc.common.ServiceException;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author Torture
     * @description 测试elk
     */
    @RestController
    @Slf4j
    public class LogController {
    
        @GetMapping("/errorLog")
        public void log(){
            Exception e = new ServiceException("springboot + elk 错误日志测试......");
            log.error(e.getMessage(),e);
        }
    }
    

    使用postman请求error日志:


    请求error日志.png

    idea控制台输出结果:


    idea控制台error日志输出.png

    kibana展示error日志:


    logstash error日志展示.png

    展开详情看看,发现连错误日志的堆栈信息都打印出来了,妙啊!


    logstash error日志详情.png

    8.最后我们再来使用kibana筛选一下日志级别

    点击添加筛选按钮:


    logstash日志条件筛选.png

    我们来筛选一下error日志:


    logstash日志条件筛选2.png

    筛选结果:


    logstash日志筛选结果展示.png

    至此,springboot 整合 elk的教程完结撒花!

    转载请说明出处!
    上一篇:springboot + elk第三篇:docker部署logstash

    相关文章

      网友评论

        本文标题:springboot + elk第四篇:springboot整合

        本文链接:https://www.haomeiwen.com/subject/gpxmdltx.html