0
点赞
收藏
分享

微信扫一扫

SpringBoot整合Logstash,实现日志统计


SpringBoot整合Logstash

一. ELK简介

ELK是Elastic公司的三个组件,他们三个配合实现日志收集.

  • ElasticSearch:用于存储日志信息;
  • Logstash:用于收集、处理和转发日志信息;
  • Kibana:提供可视化的Web界面.

二. ELK环境安装

有关ELK安装请参考我之前的教程.

  • Windows下Logstash安装:

三. 配置Logstash

1. 创建Logstash.conf配置文件

进入到logstash安装目录下,我的目录为E:\ELK\logstash-5.6.8\bin目录.

SpringBoot整合Logstash,实现日志统计_日志输出


在该目录下创建一个Logstash.conf配置文件,文件内容如下:

input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
}
}
output {
elasticsearch {
hosts => "localhost:9200"
index => "springboot-logstash-%{+YYYY.MM.dd}"
}
}

2. 启动logstash

SpringBoot整合Logstash,实现日志统计_spring_02


logstash -f logstash.conf

效果如下:

SpringBoot整合Logstash,实现日志统计_spring_03


四. SpringBoot整合Logstash

1. 添加依赖包

<dependencies>
<!--集成logstash-->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.3</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
</dependency>
</dependencies>

2. 创建logback-spring.xml文件

新建一个logback-spring.xml文件,配置logback日志信息,注意这里配置的destination属性,输出的要和logstash配置的对应上,不然收集不上,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/base.xml"/>

<springProperty scope="context" name="appName" source="spring.application.name"/>

<!-- 日志在工程中的输出位置 -->
<property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${appName}"/>

<!-- 控制台的日志输出样式 -->
<property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<!-- 日志输出编码 -->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>

<!--logstash配置-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>127.0.0.1:4560</destination>
<!-- 日志输出编码 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"logLevel": "%level",
"serviceName": "${springAppName:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}",
"rest": "%message"
}
</pattern>
</pattern>
</providers>
</encoder>
<!--<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>-->
</appender>

<root level="INFO">
<appender-ref ref="LOGSTASH"/>
<appender-ref ref="CONSOLE"/>
</root>

</configuration>

3. 创建Controller测试类

package com.syc.boot;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
public class LogController {

@GetMapping("/test")
public String showLog(){
log.warn("日志测试,啦啦啦啦,lalala");

return "ok";
}

}

4. 创建入口类

package com.syc.boot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class LogApplication {

public static void main(String[] args){
SpringApplication.run(LogApplication.class,args);
}
}

5. 完整项目结构

SpringBoot整合Logstash,实现日志统计_xml_04


6. 测试

6.1 在浏览器执行test请求进行测试

SpringBoot整合Logstash,实现日志统计_spring_05


6.2 kibana中查看索引

打开kibana管理页面,添加刚刚创建的索引,如图所示:

SpringBoot整合Logstash,实现日志统计_日志输出_06


接下来在浏览器多次访问刚刚在项目中输出日志的方法,查询控制台,如下所示.

SpringBoot整合Logstash,实现日志统计_日志输出_07


然后在进入kibana查看,不光是日志内容,还有自定义的属性也显示出来了.

SpringBoot整合Logstash,实现日志统计_spring_08


至此,我们在SpringBoot中整合ELK实现了日志收集.

 

举报

相关推荐

0 条评论