SpringBoot整合ELK使用详解

devtools/2024/11/20 4:17:41/

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服务的配置。

    version: '3'
    services:elasticsearch:image: elasticsearch:7.6.2container_name: elasticsearchuser: rootenvironment:- "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/dataports:- 9200:9200- 9300:9300logstash:image: logstash:7.6.2container_name: logstashenvironment:- TZ=Asia/Shanghaivolumes:- /mydata/logstash/logstash-springboot.conf:/usr/share/logstash/pipeline/logstash.confdepends_on:- elasticsearchlinks:- elasticsearch:esports:- 4560:4560kibana:image: kibana:7.6.2container_name: kibanalinks:- elasticsearch:esdepends_on:- elasticsearchenvironment:- "elasticsearch.hosts=http://es:9200"ports:- 5601:5601
    
  2. 编写Logstash配置文件
    /mydata/logstash/目录下创建logstash-springboot.conf文件,配置Logstash的输入和输出。

    input {tcp {mode => "server"host => "0.0.0.0"port => 4560codec => 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容器安装该插件。

    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交互的依赖。

    <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。

    <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进行交互。

    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。

    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作为一种强大的日志处理方案,可以帮助我们高效地管理和分析微服务架构中的日志数据,提高系统的稳定性和可维护性。


http://www.ppmy.cn/devtools/135382.html

相关文章

Docker部署Kafka集群,增加 SASL_SSL认证,并集成到Spring Boot,无Zookeeper版

1&#xff0c;准备好Kafka 镜像包&#xff1a; bitnami/kafka:3.9.0 镜像资源包 2&#xff0c;准备好kafka.keystore.jks 和 kafka.truststore.jks证书 具体操作可参考&#xff1a; Docker部署Kafka SASL_SSL认证&#xff0c;并集成到Spring Boot-CSDN博客 3&#xff0c;配置…

深入理解BERT模型:BertModel类详解

BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是由Google研究人员提出的一种基于Transformer架构的预训练模型&#xff0c;它在多个自然语言处理任务中取得了显著的性能提升。本文将详细介绍BERT模型的核心实现类——BertModel&#x…

ue中使用webui有效果白色拖动条 有白边

这种类型&#xff0c;分析发现跟ue没有关系 是网页代码的问题 可以在外头加个overflow: hidden; <body style"height: 100%; margin: 0;overflow: hidden;">完美解决

解锁数据世界:从基础到精通的数据库探索之旅

文章目录 一. 数据库介绍1. 数据库的重要性2. 常用关系型数据库Oracle数据库MySQL数据库SQL Server数据库 二. SQL语言概述数据库相关操作1.创建数据库2. 删除数据库 数据库表数据类型表的创建表的约束主键约束 (primary key)非空约束 (not null)唯一约束 (unique)默认值约束 (…

泷羽sec渗透DC靶场(1)完全保姆级学习笔记

前言 本次学习的是在b站up主泷羽sec课程完整版跳转链接有感而发&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 &#xff0…

日常ctf

1&#xff0c; [陇剑杯 2021]日志分析&#xff08;问1&#xff09; %2e 为URL编码的符号 "." flag{www.zip} 2&#xff0c; [陇剑杯 2021]日志分析&#xff08;问2&#xff09; 根据之前题目的分析&#xff0c;在获取到源码文件之后&#xff0c;黑客又成功访问了in…

汽车资讯新动力:Spring Boot技术驱动

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

【论文阅读】Large Language Models for Equivalent Mutant Detection: How Far Are We?

阅读笔记&#xff1a;Large Language Models for Equivalent Mutant Detection: How Far Are We? 1. 来源出处 本文发表于《ISSTA’24, September 16–20, 2024, Vienna, Austria》会议&#xff0c;由Zhao Tian, Honglin Shu, Dong Wang, Xuejie Cao, Yasutaka Kamei和Junji…