实时日志分析:使用 ELK Stack 监控 Spring Boot 应用
本文探讨了如何将 ELK Stack(Elasticsearch、Logstash 和 Kibana)与 Spring Boot 应用结合,构建高效的日志管理和监控系统。通过配置 Logstash 接收和处理 Spring Boot 生成的日志,数据被实时存储在 Elasticsearch 中,用户可以使用 Kibana 创建动态仪表板,直观展示应用性能和运行状态。此方案不仅提高了日志的可视化能力
·
1.环境准备
在开始之前,请确保你的开发环境中安装了以下软件:
- JDK 1.8 或更高版本
- Maven
- Elasticsearch
- Logstash
- Kibana
2.安装 Elasticsearch
- 下载地址 Index of elasticsearch-local
https://mirrors.huaweicloud.com/elasticsearch/ - 配置(一般来说不需要修改配置)
- 解压后找到bin目录下的 elasticsearch.bat 启动即可
- 访问http://localhost:9200/ 启动成功如下

3.安装 Logstash
- 下载地址 Download Logstash Free | Get Started Now | ElasticDownload Logstash or the complete Elastic Stack (formerly ELK stack) for free and start collecting, searching, and analyzing your data with Elastic in minutes....
https://www.elastic.co/cn/downloads/logstash - 配置文件修改 进入config目录下 找到logstash.conf文件 没有就新建
- 配置文件中的
input部分定义了数据来源,使用 TCP 协议以服务器模式监听本地主机127.0.0.1的 4560 端口,并将接收的 JSON 数据通过json_lines编码格式解析;output部分则将接收到的数据输出到本地 Elasticsearch 实例,指定主机为127.0.0.1:9200,索引名称为spx_admin_sit-加上当前日期,并将数据以rubydebug格式输出到控制台,便于调试 -
配置成功后在bin目录下运行 终端命令 ./logstash -f ../config/logstash.conf
input { tcp { mode => "server" host => "127.0.0.1" port => 4560 codec => json_lines } } output { elasticsearch { hosts => "127.0.0.1:9200" index => "spx_admin_sit-%{+YYYY.MM.dd}" } stdout{ codec=>rubydebug } }
4.安装 Kibana
- 下载地址 Index of kibana-local
- 配置(一般来说不需要修改配置)
- 解压后找到bin目录下的 kibana.bat启动即可
- 启动成功后 访问 http://localhost:5601/
- 访问成功后出现以下界面

5.springboot项目配置日志
- 引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>6.6</version> <!-- 确保使用最新版本 --> </dependency> - 在项目的resources目录下新建logback.xml文件,4560 是 logstash.conf文件中配置的port
<configuration> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <remoteHost>localhost</remoteHost> <port>4560</port> <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp/> <logger/> <threadName/> <level/> <message/> <logstashMarkers/> <arguments/> <stackTrace/> </providers> </encoder> </appender> <root level="INFO"> <appender-ref ref="LOGSTASH"/> </root> </configuration> - 新建一个controller测试
@RestController @RequestMapping("/api-sit/logback") public class LogBackController { private static final Logger log = LoggerFactory.getLogger(LogBackController.class); @GetMapping("/echo") public String echo() { log.info("api-sit/logback echo {}", System.currentTimeMillis()); log.info("api-sit/logback echo {}", "守护最好的坤坤"); return "OK"; } } - 启动项目后,用POSTMAN调用多次接口
- 进入Kibana管理界面,依次点击字母D->索引模式->创建索引模式

- 输入spx_admin_sit* 也就是logstash.conf文件中配置的 index => "spx_admin_sit-%{+YYYY.MM.dd}"
- 点击下一步,时间字段选择@timestamp 再点击创建索引模式


- 点击左上角三条杆图标 ->再点击Discover,选择自己的索引就能看到日志了,如果没有看到可以多次调用接口查看,再点刷新


6.注意事项
- 3个软件的版本尽量保持一致,如图

- 启动Logstash会出现 Logstash Permission denied - NUL error 解决方案参考Logstash Permission denied - NUL error - Logstash - Discuss the Elastic Stack
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)