springboot接入elk分布式日志管理(并实现日志滚动更新,开发环境、生产环境动态灵活配置)

本文用于springboot项目介入elk分布式日志管理系统说明,springboot项目使用logback进行日志管理,通过logback直接写入logstash管道,再由管道输出至elasticsearch,由kibana进行配置展示。

  1. 版本说明:本文搭建elk为8.1.2版本,如升级版本,或版本不兼容情况,需要自行匹配版本
    依赖引入,在pom包中加入logback,logstash依赖:
<!-- https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder -->
	<dependency>
		<groupId>net.logstash.logback</groupId>
		<artifactId>logstash-logback-encoder</artifactId>
		<version>7.1.1</version>
	</dependency>
  1. 添加logback日志配置文件,实现本地环境和生产环境自动配置,本文提供了两套配置文件,由properties文件指定项目启动时的日志配置文件,关于xml文件中相关配置说明,本文不再做过多阐述
  • 项目properties配置项增加以下两个参数:
# 让apollo加载在xml加载之前
apollo.bootstrap.eagerLoad.enabled=true
# 指定日志的配置文件(开发环境配置)
logging.config=classpath:logback-dev.xml
# 指定日志的配置文件(生产环境配置)
# logging.config=classpath:logback-prod.xml
  • logback-dev.xml 开发环境无需过多配置,只需要在控制台正常打印info日志即可


<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds">
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <!--  注意此处必须使用全小写命名,不可使用大写  -->
    <property name="appName" value="ricefarm-common"/>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="./logs" />

        <!-- 控制台输出 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
            </filter>
            <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>
        </appender>
        <!-- 日志输出级别 -->
        <root level="info">
        </root>

</configuration>
  • logback-prod.xml 生产环境日志配置文件参考,该配置,会将error日志写入logstash ,并在日志中加入appName字段,配合管道完成每日动态索引

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds">
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <!--  注意此处必须使用全小写命名,不可使用大写  -->
    <property name="appName" value="ricefarm-common"/>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="./logs" />

        <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>ERROR</level>
            </filter>
            <!-- 此处填写logstash管道暴露端口,自行修改 --!>
            <destination>127.0.0.1:4560</destination>
            <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <!-- 添加自定义服务标识字段,管道中可以将该字段处理成索引标识 --!>
                <customFields>{"appName":"${appName}"}</customFields>
            </encoder>
        </appender>

        <!-- 控制台输出 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
            </filter>
            <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>
        </appender>

    <!-- info级别日志文件输出 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志文件输出的文件名 -->
        <File>${LOG_HOME}/${appName}-info.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 每日生成日志文件或日志文件大小超出限制后输出的文件名模板 -->
            <fileNamePattern>${LOG_HOME}/${appName}-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 日志文件保留天数 -->
            <maxHistory>7</maxHistory>
            <!-- 日志文件最大大小:100MB -->
            <maxFileSize>100MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- error级别日志文件输出 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志输出级别,优先级 > '<root level>' -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <File>${LOG_HOME}/${appName}-error.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${appName}-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>14</maxHistory>
            <maxFileSize>100MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>


        <!-- 日志输出级别 -->
        <root level="info">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="LOGSTASH" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="ERROR_FILE" />
        </root>

</configuration>
  1. 如果项目通过apollo进行配置管理,还需要在启动参数加上
-Dapollo.bootstrap.enabled=true
-Dapollo.bootstrap.eagerLoad.enabled=true
  1. 当前配置文件选择prod时,会在实现滚动更新日志文件的同时,将error日志写入logstash中。以下操作是利用sl4j 写入error日志:
    在这里插入图片描述
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的Spring BootELK集成的实现案例: 1. 添加依赖 在Spring Boot应用程序的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>6.6</version> </dependency> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-socketappender</artifactId> <version>6.6</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>6.6</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> <version>2.1.6.RELEASE</version> </dependency> ``` 2. 配置logback.xml 在src/main/resources目录下创建logback.xml文件,并添加以下配置: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>${LOGSTASH_HOST}:${LOGSTASH_PORT}</destination> <encoder class="net.logstash.logback.encoder.LogstashEncoder" /> </appender> <logger name="com.example" level="DEBUG" additivity="false"> <appender-ref ref="logstash" /> </logger> <root level="INFO"> <appender-ref ref="logstash" /> </root> </configuration> ``` 3. 配置logstash.conf 在logstash的安装目录下创建logstash.conf文件,并添加以下配置: ```conf input { tcp { port => 5000 codec => json_lines } } output { elasticsearch { hosts => ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"] index => "logstash-%{+YYYY.MM.dd}" document_type => "log" } } ``` 4. 配置application.properties 在Spring Boot应用程序的src/main/resources目录下创建application.properties文件,并添加以下配置: ```properties server.port=8080 spring.application.name=example-app logging.file=./logs/example-app.log # Logstash LOGSTASH_HOST=localhost LOGSTASH_PORT=5000 # Elasticsearch ELASTICSEARCH_HOST=localhost ELASTICSEARCH_PORT=9200 ``` 5. 启动ELK 启动Elasticsearch和Kibana。在logstash的安装目录下执行以下命令启动logstash: ```sh bin/logstash -f logstash.conf ``` 6. 测试应用程序 在浏览器中访问http://localhost:8080/hello,应用程序会记录一条日志。打开Kibana,创建索引模式,然后在Discover页面中可以看到刚刚记录的日志。创建一个仪表板,可以监控应用程序的性能和健康状况。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值