SpringBoot整合ELK使用详解

SpringBoot整合ELK使用详解

在微服务架构中,日志系统的搭建和管理是至关重要的一环。ELK(Elasticsearch、Logstash、Kibana)作为一种强大的日志处理方案,能够帮助我们高效地收集、存储、处理和可视化日志数据。本文将详细介绍如何在Spring Boot项目中整合ELK,实现日志的收集、存储和可视化。

一、ELK简介

ELK是Elasticsearch、Logstash和Kibana的简称,它们分别承担着日志处理的不同角色:

  1. Elasticsearch

    Elasticsearch是一个基于Lucene的分布式搜索和分析引擎,适用于全文检索、结构化检索和分析。它提供了近实时的搜索和分析功能,并且能够很好地处理PB级别的数据。

  2. Logstash

    Logstash是一个具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端。在这个过程中,Logstash允许用户根据自己的需求在中间加上滤网,以实现对数据的处理和转换。Logstash提供了多种输入和输出插件,以及丰富的滤网功能,能够满足各种应用场景的需求。

  3. Kibana

    Kibana是一个开源的分析与可视化平台,设计用于和Elasticsearch一起使用。通过Kibana,用户可以搜索、查看和交互存放在Elasticsearch索引里的数据,并使用各种图表、表格和地图等形式展示高级数据分析与可视化结果。

二、准备工作

在整合ELK之前,我们需要进行以下准备工作:

  1. 安装Docker和Docker Compose

    Docker是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。Docker Compose是一个用于定义和运行多个Docker容器应用的工具,通过YAML文件配置应用服务,然后使用一条命令就可以部署所有服务。

  2. 下载ELK相关镜像

    我们需要从Docker Hub上下载Elasticsearch、Logstash和Kibana的镜像,确保版本之间兼容。

三、使用Docker Compose搭建ELK环境

使用Docker Compose可以方便地搭建ELK环境,以下是具体步骤:

  1. 创建配置文件

    首先,创建一个配置文件docker-compose.yml,用于定义ELK服务的配置。

    yaml 复制代码
    version: '3'
    services:
      elasticsearch:
        image: elasticsearch:7.6.2
        container_name: elasticsearch
        user: root
        environment:
          - "cluster.name=elasticsearch"
          - "discovery.type=single-node"
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        volumes:
          - /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins
          - /mydata/elasticsearch/data:/usr/share/elasticsearch/data
        ports:
          - 9200:9200
          - 9300:9300
      logstash:
        image: logstash:7.6.2
        container_name: logstash
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - /mydata/logstash/logstash-springboot.conf:/usr/share/logstash/pipeline/logstash.conf
        depends_on:
          - elasticsearch
        links:
          - elasticsearch:es
        ports:
          - 4560:4560
      kibana:
        image: kibana:7.6.2
        container_name: kibana
        links:
          - elasticsearch:es
        depends_on:
          - elasticsearch
        environment:
          - "elasticsearch.hosts=http://es:9200"
        ports:
          - 5601:5601
  2. 编写Logstash配置文件

    /mydata/logstash/目录下创建logstash-springboot.conf文件,配置Logstash的输入和输出。

    conf 复制代码
    input {
      tcp {
        mode => "server"
        host => "0.0.0.0"
        port => 4560
        codec => json_lines
      }
    }
    output {
      elasticsearch {
        hosts => ["es:9200"]
        index => "springboot-logstash-%{+YYYY.MM.dd}"
      }
      stdout { codec => rubydebug }
    }
  3. 启动ELK服务

    docker-compose.yml文件所在的目录下执行docker-compose up -d命令,启动ELK服务。

  4. 安装json_lines插件

    由于Logstash的配置中使用了json_lines编解码器,我们需要进入Logstash容器安装该插件。

    bash 复制代码
    docker exec -it logstash /bin/bash
    cd /bin/
    logstash-plugin install logstash-codec-json_lines
    exit
    docker restart logstash
  5. 关闭防火墙

    为了确保Kibana可以正常访问,需要关闭防火墙或开放相应的端口。

  6. 访问Kibana

    在浏览器中访问http://<你的IP地址>:5601/,即可进入Kibana的Web界面。

四、Spring Boot整合ELK

接下来,我们需要在Spring Boot项目中整合ELK,实现日志的收集和存储。

  1. 添加依赖

    在Spring Boot项目的pom.xml文件中添加与Elasticsearch交互的依赖。

    xml 复制代码
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>7.17.3</version>
    </dependency>
    <dependency>
        <groupId>net.logstash.logback</groupId>
        <artifactId>logstash-logback-encoder</artifactId>
        <version>6.6</version>
    </dependency>
  2. 配置Logstash Appender

    在Spring Boot项目的logback-spring.xml文件中配置Logstash Appender,将日志发送到Logstash。

    xml 复制代码
    <configuration>
        <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.LogstashEncoder" />
        </appender>
    
        <root level="info">
            <appender-ref ref="LOGSTASH" />
        </root>
    </configuration>
  3. 创建Elasticsearch客户端

    在Spring Boot项目中创建一个Elasticsearch客户端,用于与Elasticsearch进行交互。

    java 复制代码
    import org.apache.http.HttpHost;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    
    public class ElasticsearchClient {
        public RestHighLevelClient getClient() {
            return new RestHighLevelClient(
                RestClient.builder(
                    new HttpHost("localhost", 9200, "http")
                )
            );
        }
    }
  4. 测试日志收集

    在Spring Boot项目中编写一个测试接口,生成日志并发送到Logstash。

    java 复制代码
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import com.alibaba.fastjson.JSON;
    import java.util.Random;
    
    @RestController
    public class LogController {
        private static final Logger log = LoggerFactory.getLogger(LogController.class);
    
        @GetMapping("/testLog")
        public String testLog() {
            UserDto userDto = new UserDto();
            userDto.setAge(new Random().nextInt(100));
            userDto.setName("User" + new Random().nextInt(100));
            log.info(JSON.toJSONString(userDto));
            return "Log sent";
        }
    }
    
    class UserDto {
        private int age;
        private String name;
    
        // Getters and Setters
    }
  5. 查看Kibana中的日志

    在Kibana中配置索引模式,选择Logstash中设置的索引名,然后就可以在Kibana的Discover页面中查看日志数据了。

五、总结

通过上述步骤,我们成功地在Spring Boot项目中整合了ELK,实现了日志的收集、存储和可视化。ELK作为一种强大的日志处理方案,可以帮助我们高效地管理和分析微服务架构中的日志数据,提高系统的稳定性和可维护性。

相关推荐
慕木沐7 分钟前
【JUC并发】cmpxchg和lock指令
后端·并发·juc·汇编指令
liuxin3344556634 分钟前
Spring Boot汽车资讯:科技与速度的新纪元
spring boot·后端·科技
程序猿麦小七44 分钟前
springboot006基于SpringBoot的网上订餐系统(源码+包运行+LW+技术指导)
java·spring boot·后端·网上订餐
Daniel521-Spark1 小时前
三、谷粒商城- Spring Cloud Alibaba(3)
java·分布式·后端·spring cloud
《源码好优多》1 小时前
基于Java Springboot图书馆管理系统
java·开发语言·spring boot
昔我往昔1 小时前
SpringBoot 中常见的设计模式
spring boot·后端·设计模式
弥琉撒到我2 小时前
docker对其他中间件镜像拉取多个服务器部署
开发语言·后端·ruby
世间万物皆对象2 小时前
Spring Boot核心概念:自动配置
java·spring boot·后端
weixin_438335402 小时前
根据 Maven 的不同 profiles 来改变 Spring Boot 应用程序的配置
java·spring boot·maven