【微服务】Spring Boot集成ELK实用案例

推荐一款我一直在用国内很火的AI网站,包含GPT3.5/4.0、文心一言、通义千问、智谱AI等多个AI模型,支持PC、APP、VScode插件同步使用,点击链接跳转->ChatGPT4.0中文版

一、前言

在现代软件开发中,微服务架构已成为一种流行趋势。随之而来的挑战之一是如何有效地管理和分析分布在各个服务中的日志数据。本文将深入探讨如何在Spring Boot中集成ELK栈,以实现集中日志管理的目标。

二、为什么需要ELK

随着微服务架构的普及,服务数量的增加导致日志数据分散在不同的服务器上,这使得日志管理变得复杂。ELK栈的引入能够帮助我们集中管理日志,提供实时监控,快速搜索以及日志分析的能力,从而提升系统的可维护性和可观察性。

三、ELK介绍

3.1 什么是ELK

ELK是Elasticsearch、Logstash和Kibana的缩写。这三个组件协同工作,提供了一个强大的解决方案,用于日志的收集、存储、搜索和可视化。

3.2 ELK工作原理

ELK的工作原理基于以下流程:

  • Logstash 处理来自不同源的日志数据,并将其转换成结构化的格式。
  • Elasticsearch 作为搜索和分析引擎,存储和索引日志数据。
  • Kibana 为用户提供了一个强大的前端界面,用于数据的搜索、展示和图形化分析。

在这里插入图片描述

四、ELK环境搭建

4.1 搭建Elasticsearch环境

4.1.1 获取Elasticsearch镜像

使用Docker可以轻松获取Elasticsearch镜像。

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.9.3
4.1.2 启动Elasticsearch容器

使用Docker启动Elasticsearch容器,并映射必要的端口。

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 elasticsearch:7.9.3
4.1.3 配置Elasticsearch参数

通过修改配置文件elasticsearch.yml,可以设置集群名称、节点名称等参数。

4.1.4 重启Elasticsearch容器并访问

重启容器以应用配置更改,并通过浏览器访问http://localhost:9200验证是否启动成功。
在这里插入图片描述

4.2 搭建Kibana

4.2.1 拉取Kibana镜像
docker pull docker.elastic.co/kibana/kibana:7.9.3
4.2.2 启动Kibana容器
docker run -d --name kibana --link elasticsearch:elasticsearch -p 5601:5601 kibana:7.9.3
4.2.3 修改配置文件

kibana.yml中配置Elasticsearch的URL。

4.2.4 重启容器并访问

重启Kibana容器,并通过http://localhost:5601访问Kibana界面。

在这里插入图片描述

4.3 搭建Logstash

4.3.1 下载安装包

从官方网站下载Logstash的安装包。

wget https://artifacts.elastic.co/downloads/logstash/logstash-7.1.0.tar.gz
4.3.2 解压安装包

解压下载的安装包到指定目录。

tar -zxvf logstash-7.1.0.tar.gz
4.3.3 新增配置Logstash文件

创建Logstash配置文件,定义输入、过滤器和输出。

cd cd logstash-7.1.0/mkdir log-confvi logstash.conf
input {tcp {mode => "server"host => "0.0.0.0"port => 4560codec => json}
}
output {elasticsearch {hosts => "es公网地址:9200"index => "springboot-logstash-%{+YYYY.MM.dd}"},stdout { codec => rubydebug }
}

五、Spring Boot集成ELK

5.1 集成过程

5.1.1 创建Spring Boot工程

使用Spring Initializr或者你喜欢的IDE创建一个新的Spring Boot项目。选择Web、Actuator和其他你需要的依赖。

5.1.2 导入依赖

pom.xml中添加以下依赖,以便集成ELK:

<dependencies><!-- Logstash logback encoder --><dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.6</version></dependency><!-- 其他依赖 -->
</dependencies>
5.1.3 配置logback日志

创建或修改logback-spring.xml文件,配置Logback以使用Logstash encoder,并将日志发送到Logstash:

<configuration><appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>localhost:5000</destination> <!-- Logstash的地址 --><encoder class="net.logstash.logback.encoder.LogstashEncoder" /></appender><root level="INFO"><appender-ref ref="LOGSTASH" /></root>
</configuration>
5.1.4 增加测试接口

在你的Spring Boot应用中增加一个简单的REST接口,用于生成日志:

@RestController
public class LoggingController {private static final Logger logger = LoggerFactory.getLogger(LoggingController.class);@GetMapping("/log")public String log() {logger.info("Log message from Spring Boot");return "Check the logs for a message";}
}

5.2 效果演示

5.2.1 启动服务工程

运行Spring Boot应用,并确保所有的ELK服务都已经启动并运行。
在这里插入图片描述

5.2.2 配置索引模式

在Kibana中创建一个索引模式,以便能够检索和查看Elasticsearch中的日志数据。
在这里插入图片描述

5.2.3 调用接口验证效果

通过调用之前创建的REST接口,生成日志。然后在Kibana中查看这些日志,验证集成是否成功。
在这里插入图片描述

5.3 ELK使用补充

在实际使用中,可能需要对ELK进行更多的配置,比如设置Logstash的过滤器来解析复杂的日志格式,或者在Kibana中创建复杂的仪表板来展示日志数据。

六、写在文末

通过本文的介绍,我们了解了如何在Spring Boot应用中集成ELK栈,从而实现高效的日志管理。ELK栈的强大功能能够帮助我们更好地理解和分析系统的运行情况,是微服务架构中不可或缺的工具之一。

集成ELK栈是一个涉及多个组件和配置的过程,可能会遇到各种问题。因此,耐心调试和仔细阅读文档是非常重要的。希望本文能够帮助你顺利完成集成,并且能够从中获得实际的价值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1 月 30 日算法练习-数论

唯一分解定理 唯一分解定理指的是&#xff1a;对于任意一个>1的正整数&#xff0c;都可以以唯一的一种方式分解为若干质因数的乘积。 x p 1 k 1 ⋅ p 2 k 2 ⋅ … ⋅ p m k m x p_1^{k_1} \cdot p_2^{k_2} \cdot \ldots \cdot p_m^{k_m} xp1k1​​⋅p2k2​​⋅…⋅pmkm​…

数据分析之数据预处理、分析建模、可视化

数据分析的过程通常包括数据预处理、分析建模和可视化三个主要阶段。以下是每个阶段的简要说明&#xff1a; 数据预处理&#xff1a; 数据预处理是数据分析过程中的一个重要步骤&#xff0c;它涉及到对原始数据进行清洗、整理、转化等操作&#xff0c;以便更好地进行后续的分析…

Guava cache中 LoadingCache和Cache的区别

在 Guava 缓存库中&#xff0c;LoadingCache 和 Cache 是两个不同的接口&#xff0c;它们在功能和使用方式上有一些区别。 LoadingCache&#xff1a; LoadingCache 是 Cache 接口的子接口&#xff0c;继承了 Cache 的所有方法&#xff0c;并添加了一些额外的方法。LoadingCache…

Kubernetes集群搭建

一、概述 Kubernetes是一个Google开源的全新的分布式容器集群管理系统&#xff0c;由于从第一个字母到字母s中间有8个字母&#xff0c;所以简称K8s。 二、准备 ip角色内存192.168.187.130master4G192.168.187.131node2G192.168.187.132node2G 小提示&#xff1a; 设置静态i…

前端使用vue-simple-uploader进行分片上传

目录 一、安装vue-simple-uploader 二、在vue中使用 一、安装vue-simple-uploader npm install vue-simple-uploader --save main.js初始化vue-simple-uploader import uploader from vue-simple-uploaderVue.use(uploader) common/config文件 export const ACCEPT_CONF…

信号传输中串扰的影响.

1.导线间的串扰 当导线之间发生串扰时,一根导线上的信号会影响到另一根信号线,给连接的电路造成干扰。这种现象通常发生在平行的导线之间。在设计设备的布线时,特别要注意低电平模拟信号的传输问题。附近导线对其的串扰常常是系统性能下降的主要原因。因此在布线设计时,必须…

docker容器代理上网问题解决参考

背景&#xff1a;折腾一个项目&#xff0c;奈何很多依赖来自外部服务器。 一、网上冲浪做法 1、修改docker配置文件 2、根据docker官方教程设置代理配置 3、设置端口映射 4、加载镜像时&#xff0c;设置网络只能走本地 奈何都没有解决容器内部代理上网问题 二、个人做法…

seq2seq编码器-解码器实现

我们在之前的文章快速上手LSTM-CSDN博客中提及了RNN的几种不同的类型&#xff0c;其中有同步的 many to many 的根据视频的每一帧对视频分类任务&#xff0c;以及异步的 many to many 文本翻译。对于这种输入和输出不等长的序列&#xff0c;我们采用seq2seq&#xff08;sequenc…

一步步成为React全栈大师:从环境搭建到应用部署

文章目录 第一步&#xff1a;环境搭建第二步&#xff1a;了解React基础第三步&#xff1a;组件与路由第四步&#xff1a;状态管理第五步&#xff1a;接口与数据交互第六步&#xff1a;样式与布局第七步&#xff1a;测试第八步&#xff1a;构建与部署《深入浅出React开发指南》内…

【面试官问】Redis 持久化

目录 【面试官问】Redis 持久化 Redis 持久化的方式RDB(Redis DataBase)AOF(Append Only File)混合持久化:RDB + AOF 混合方式的持久化持久化最佳方式控制持久化开关主从部署使用混合持久化使用配置更高的机器参考文章所属专区

React 面试题

1、组件通信的方式 父组件传子组件&#xff1a;通过props 的方式 子组件传父组件&#xff1a;父组件将自身函数传入&#xff0c;子组件调用该函数&#xff0c;父组件在函数中拿到子组件传递的数据 兄弟组件通信&#xff1a;找到共同的父节点&#xff0c;用父节点转发进行通信 …

一键转换MOV至MP3:轻松删除原视频,释放存储空间!

你是否曾经有一个MOV格式的视频文件&#xff0c;想要提取其中的音频却苦于没有合适的工具&#xff1f;现在&#xff0c;有了我们的全新视频剪辑工具&#xff0c;这个烦恼全部消失&#xff01;我们为你提供一键式解决方案&#xff0c;将MOV视频文件快速转换为MP3音频格式。 首先…

基于单片机的造纸纸浆液位控制系统结构设计

摘要:为适应无人化与高效化制浆造纸生产体系&#xff0c;造纸企业趋于以嵌入式技术优化造纸过 程中的纸浆液位控制系统&#xff0c;以单片机与传感器相互耦合实现纸浆液位控制。本文基于单片机 设计了造纸纸浆液位控制系统&#xff0c;其结构由控制模块、信息采集模块、物联网模…

备战蓝桥杯---搜索(应用入门)

话不多说&#xff0c;直接看题&#xff1a; 显然&#xff0c;我们可以用BFS&#xff0c;其中&#xff0c;对于判重操作&#xff0c;我们可以把这矩阵化成字符串的形式再用map去存&#xff0c;用a数组去重现字符串&#xff08;相当于map映射的反向操作&#xff09;。移动空格先找…

JVM之Java内存区域

JVM-Java内存区域 Java内存区域是Java虚拟机&#xff08;JVM&#xff09;管理的内存资源的逻辑划分&#xff0c;用于存储程序运行时所需的数据。Java内存区域的合理划分和管理对于程序的性能和稳定性具有重要影响。本文将深入探讨Java内存区域的各个部分&#xff0c;包括方法区…

(delphi11最新学习资料) Object Pascal 学习笔记---第4章第2节( 参数和返回值)

4.2 参数和返回值 ​ 调用函数或过程时&#xff0c;需要传递正确数量的参数&#xff0c;并确保它们符合预期类型。否则&#xff0c;编译器会发出错误信息&#xff0c;就像给变量赋值时类型不匹配一样。前面的 DoubleIt 函数定义了一个 整数参数&#xff0c;如果调用&#xff1…

vit细粒度图像分类(九)RAMS-Trans学习笔记

1.摘要 在细粒度图像识别(FGIR)中&#xff0c;区域注意力的定位和放大是一个重要因素&#xff0c;基于卷积神经网络(cnn)的方法对此进行了大量探索。近年来发展起来的视觉变压器(ViT)在计算机视觉任务中取得了可喜的成果。与cnn相比&#xff0c;图像序列化是一种全新的方式。然…

npm ERR! code CERT_HAS_EXPIRED

执行npm i报错&#xff1a; npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT npm ERR! network request to https://registry.npmjs.org/react-redux failed, reason: connect ETIMEDOUT 104.16.2.35:443 npm ERR! network This is a problem rel…

机器学习算法之支持向量机(SVM)

支持向量机(Support Vector Machine,简称SVM)是一种广泛用于分类、回归和其他学习任务的强大的监督学习算法。SVM的目标是找到一个超平面,以最大化地分隔不同类别的数据点。在二维空间中,这个超平面可以被看作是一条直线,但在更高维度的空间中,它可能是一个平面或者更复…

Android PMS——网络下载应用安装(六)

我们接着上一篇文章继续分析,文章最后调用到了 PackageManagerService 中的 installStage() 方法,这里就是正式开始 APK 的安装过程。 一、安装流程 1、PackageManagerService 源码位置:/frameworks/base/services/core/java/com/android/server/pm/PackageManagerServic…