05、Java Logstash_Kibana-搭建日志系统

搭建日志系统

  • 1.新建项目

  • 2.修改 pom.xml

  • 3.创建配置文件

  • 4.新建实体

  • 5.新建 service 及实现类

  • 6.新建控制器

  • 7.测试结果

  • 绝大多数项目在后台管理中都有日志管理。以前的日志信息是存储在 MySQL 中,日志随着项目运行时间会越来越多,一直存储在 MySQL 会导致查询降低。现在的日志信息通过 ELK 技术栈进行操作。存储在 Elasticsearch 中,可以更好的分析日志内容及更快查询效率

  • 给定简单需求:
    搭建日志系统,提供查询 Elasticsearch 中日志信息的接口

1.新建项目

创建一个新的Spring Boot项目,命名为ELK_Demo
你可以使用Spring Initializr(https://start.spring.io/) 或者你偏好的IDE来创建这个项目。

2.修改 pom.xml

在这个项目的基础上,我们将构建所需的最基本环境来满足日志系统的需求。以下是pom.xml文件的基础配置:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.6.RELEASE</version>
</parent>

<dependencies>
    <!-- Spring Boot Web 依赖用于构建RESTful API -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Elasticsearch 依赖用于与Elasticsearch交互 -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-elasticsearch</artifactId>
        <version>4.0.1.RELEASE</version>
    </dependency>

    <!-- 对于日志相关操作,我们需要以下依赖 -->
    <dependency>
        <groupId>net.logstash.logback</groupId>
        <artifactId>logstash-logback-encoder</artifactId>
        <version>6.6</version>
    </dependency>

    <!-- 其他可能需要的依赖 -->
</dependencies>

注意:以上依赖中,spring-data-elasticsearch的版本号是示例,请根据实际情况选择合适的版本。如果项目中考虑使用Spring Cloud环境,则还需添加Eureka等相关依赖。

3.创建配置文件

在项目的src/main/resources目录下创建一个application.properties文件,配置Spring Boot项目和Elasticsearch的连接细节。

server.port=8080
spring.elasticsearch.rest.uris=http://localhost:9200

4.新建实体

在项目中创建一个日志实体类LogEntry,它将映射到Elasticsearch中存储的日志结构。

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "log")
public class LogEntry {

    @Id
    private String id;
    private String message;
    private String level;
    private Date timestamp;

    // 构造器、getter和setter方法
}

5.新建 service 及实现类

创建一个日志服务接口LogService以及它的实现类LogServiceImpl,用于处理日志数据的存取。

public interface LogService {
    List<LogEntry> findAllLogs();
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class LogServiceImpl implements LogService {

    @Autowired
    private LogRepository logRepository;

    @Override
    public List<LogEntry> findAllLogs() {
        return logRepository.findAll();
    }
}

6.新建控制器

创建一个REST控制器LogController,通过HTTP请求暴露查询日志的接口。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

@RestController
@RequestMapping("/logs")
public class LogController {

    @Autowired
    private LogService logService;

    @GetMapping
    public List<LogEntry> getAllLogs() {
        return logService.findAllLogs();
    }
}

7.测试结果

启动Spring Boot应用,并通过浏览器或者Postman访问 http://localhost:8080/logs 来测试日志查询接口。你应该能看到从Elasticsearch检索到的日志数据。

通过以上步骤我们搭建了一个简单的日志系统,它不仅能将日志信息存储在Elasticsearch中,还提供了一个简单的REST API接口来查询日志数据,
大大提高了查询效率并方便了日志内容的分析。随着项目的扩展,可以进一步优化和增强这个系统的功能。