Spring Boot 整合 ELK 全面指南:实现日志采集、分析与可视化


一、ELK简介

1.1 什么是ELK?

ELK 是三个开源工具的组合:

  1. Elasticsearch:一个分布式全文搜索和分析引擎,用于存储和查询日志数据。
  2. Logstash:一个数据处理管道工具,用于收集、解析和处理日志数据。
  3. Kibana:一个可视化工具,用于以图表和仪表盘的形式展示日志数据。

这三者相互协作,为开发者和运维人员提供了强大的日志管理能力。


1.2 ELK 的核心功能

  • 日志收集与处理:通过 Logstash 或 Filebeat 收集和清洗日志数据。
  • 全文搜索与分析:利用 Elasticsearch 的强大搜索功能快速定位问题。
  • 数据可视化:Kibana 提供丰富的图表工具,将日志数据转化为易于理解的仪表盘。

二、整合目标与架构设计

2.1 整合目标

在本文中,我们将实现以下功能:

  1. 日志采集:Spring Boot 应用生成的日志自动传输至 Logstash。
  2. 日志存储:Logstash 将日志发送到 Elasticsearch 进行存储。
  3. 日志可视化:在 Kibana 中配置仪表盘,实现日志查询和监控。

2.2 架构设计

整合的架构如下:

  1. Spring Boot:产生日志,格式为 JSON 或普通文本。
  2. Logstash:从文件或网络输入接收日志数据,清洗并转发到 Elasticsearch。
  3. Elasticsearch:存储和索引日志数据。
  4. Kibana:连接 Elasticsearch,用于查询和展示数据。

三、环境准备

3.1 安装 ELK 环境

1. 下载 ELK

从官方 Elastic 网站下载 Elasticsearch、Logstash、Kibana。

2. 安装与启动

以 Linux 为例:

# 启动 Elasticsearch
./bin/elasticsearch
# 启动 Logstash
./bin/logstash -f <logstash-config-file>
# 启动 Kibana
./bin/kibana

注意:默认端口

  • Elasticsearch: 9200
  • Kibana: 5601

3.2 Spring Boot 项目依赖

确保 Spring Boot 项目中引入以下依赖:

<dependencies><!-- Spring Boot 核心依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- Spring Boot 日志支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency><!-- ELK 日志集成工具(可选) --><dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.4</version></dependency>
</dependencies>

四、实现日志采集与整合

4.1 配置 Spring Boot 日志

使用 Logback 作为日志框架,将日志输出为 JSON 格式。

修改 logback-spring.xml

创建或编辑项目中的 src/main/resources/logback-spring.xml

<configuration><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} - [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>127.0.0.1:5044</destination><encoder class="net.logstash.logback.encoder.LogstashEncoder" /></appender><root level="info"><appender-ref ref="CONSOLE" /><appender-ref ref="LOGSTASH" /></root>
</configuration>

说明LOGSTASH Appender 将日志发送到 Logstash 的 5044 端口。


4.2 配置 Logstash

创建 Logstash 配置文件 logstash.conf

input {tcp {port => 5044codec => json}
}
filter {# 自定义过滤规则
}
output {elasticsearch {hosts => ["http://localhost:9200"]index => "spring-boot-logs-%{+YYYY.MM.dd}"}stdout { codec => rubydebug }
}

启动 Logstash:

./bin/logstash -f logstash.conf

4.3 配置 Elasticsearch

启动 Elasticsearch,并确保可以通过 http://localhost:9200 访问。

验证集群状态:

curl -X GET "localhost:9200/_cluster/health?pretty"

4.4 配置 Kibana

http://localhost:5601 打开 Kibana:

  1. 进入 Management > Index Patterns
  2. 创建索引模式:spring-boot-logs-*
  3. 设置时间字段:@timestamp
  4. 保存并进入 Discover 查看日志数据。

五、日志可视化与查询

5.1 创建仪表盘

  1. 进入 Dashboard
  2. 添加图表,如:
    • 日志数量趋势图。
    • 错误日志分布图。
    • 日志级别统计图。

5.2 编写查询语句

Kibana 支持类似 SQL 的查询语句:

  • 查询所有错误日志:
    level: "ERROR"
    
  • 按时间范围查询:
    @timestamp >= "2024-01-01T00:00:00" AND @timestamp <= "2024-01-31T23:59:59"
    

六、整合过程中的问题与优化

6.1 常见问题

  1. 日志未能成功发送到 Logstash

    • 检查 Logback 配置中的 Logstash 地址是否正确。
    • 检查 Logstash 是否正常运行。
  2. Elasticsearch 索引未创建

    • 确保 Logstash 配置文件的 output 部分正确。
    • 检查 Elasticsearch 服务状态。
  3. Kibana 无法显示日志

    • 确保索引模式设置正确。
    • 检查 Kibana 与 Elasticsearch 的连接状态。

6.2 优化建议

  1. 日志异步发送:减少日志发送对应用性能的影响。
  2. 日志分级:根据不同级别的日志输出到不同的索引。
  3. 数据归档:定期清理旧日志,降低 Elasticsearch 存储压力。

七、总结

本文全面介绍了 Spring Boot 与 ELK 的整合过程,包括环境准备、配置实现和日志可视化的具体步骤。通过 ELK 的强大功能,开发者可以轻松管理日志,提升系统的可观测性和运维效率。

ELK 是一个高度灵活的日志解决方案,但在实际应用中,需要根据项目需求灵活调整配置。如果您正在寻找一个强大的日志管理工具,ELK 是一个值得选择的方案。

希望本文对您有所帮助,如有问题,欢迎留言讨论!

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

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

相关文章

CCF GESP C++ 一级上机题(十六道题及其思路详解合集)

#include <iostream> using namespace std;int main() {// 定义起始年份、结束年份、循环变量以及用于累加的变量&#xff0c;并初始化累加变量为0int start, end, i, sum 0;// 从标准输入读取起始年份和结束年份cin >> start >> end;// 循环遍历从起始年份…

Opencv+ROS实现颜色识别应用

目录 一、工具 二、原理 概念 本质 三、实践 添加发布话题 主要代码 四、成果 五、总结 一、工具 opencvros ubuntu18.04 摄像头 二、原理 概念 彩色图像&#xff1a;RGB&#xff08;红&#xff0c;绿&#xff0c;蓝&#xff09; HSV图像&#xff1a;H&#xff0…

scala模式匹配

object test47 {def main(args: Array[String]): Unit {val id"445646546548858548648"//取出id前两位val provinceid.substring(0,2) // println(province) // if (province"42"){ // println("湖北") // }else if(province&quo…

AI加持,华为全屋智能品牌升级为“鸿蒙智家”

1.传统智能家居的困境&#xff1a;从便利到繁琐 近年来&#xff0c;智能家居因其便捷性和科技感受到消费者的青睐。然而&#xff0c;随着用户需求的多样化&#xff0c;传统智能家居的弊端逐渐显现&#xff1a; 设备连接复杂&#xff0c;品牌间兼容性不足&#xff0c;用户不得不…

string类部分(C++)

目录 1. string类 1.1 auto和范围for auto关键词&#xff1a; 范围for&#xff1a; 1.2 string类的常用接口说明 a&#xff09;string类对象的常见构造 b&#xff09; string类对象的容量操作 size与length&#xff1a; capacity: empty: clear: reserve: 1.reserve&am…

大厂也在用的分布式链路追踪:TraceIdFilter + MDC + Skywalking

痛点 查线上日志时&#xff0c;同一个 Pod 内多线程日志交错&#xff0c;很难追踪每个请求对应的日志信息。 日志收集工具将多个 Pod 的日志收集到同一个数据库中后&#xff0c;情况就更加混乱不堪了。 解决 TraceId MDC 前端每次请求时&#xff0c;添加 X-App-Trace-Id 请…

Dashboard Tactics

1&#xff1a;相关链接Dashboard Tactics :: OpenCPN Dashboard Tactics Plugin rgleason/dashboard_tactics_pi: OpenCPN dashboard built-in plugin merger with external tactics_pi plugin NMEAconverter :: OpenCPN 2&#xff1a;显示样式 3&#xff1a;代码 这个插件…

【leetcode】动态规划

31. 873. 最长的斐波那契子序列的长度 题目&#xff1a; 如果序列 X_1, X_2, ..., X_n 满足下列条件&#xff0c;就说它是 斐波那契式 的&#xff1a; n > 3对于所有 i 2 < n&#xff0c;都有 X_i X_{i1} X_{i2} 给定一个严格递增的正整数数组形成序列 arr &#xff0…

24.11.26 Mybatis2

resultMap 中的标签和属性 如果是主键列 一般用id标签对应 propertyjava对象的属性 column 数据库中的列( javaType实体类数据类型 jdbcType数据库列的数据类型 ) 不需要配置 <id property"empno" column"empno" />如果是普通列 一般用result对…

第六届国际科技创新学术交流大会暨新能源科学与电力工程国际(NESEE 2024)

重要信息 会议官网&#xff1a;nesee.iaecst.org 会议时间&#xff1a;2024年12月6-8日 会议地点&#xff1a; 中国-广州&#xff08;越秀国际会议中心) 大会简介 新能源科学与电力工程国际学术会议&#xff08;NESEE 2024&#xff09;作为第六届国际科技创新学术交流大会分…

【es6】原生js在页面上画矩形添加选中状态高亮及显示调整大小控制框(三)

接上篇文章&#xff0c;这篇实现下选中当前元素显示调整大小的控制框&#xff0c;点击document取消元素的选中高亮状态效果。 实现效果 代码逻辑 动态生成控制按钮矩形,并设置响应的css // 动态添加一个调整位置的按钮addScaleBtn(target) {const w target.offsetWidth;con…

文心一言与千帆大模型平台的区别:探索百度AI生态的双子星

随着人工智能技术的迅猛发展&#xff0c;越来越多的公司开始投入资源开发自己的AI解决方案。在中国&#xff0c;百度作为互联网巨头之一&#xff0c;不仅在搜索引擎领域占据重要位置&#xff0c;还在AI领域取得了显著成就。其中&#xff0c;“文心一言”和“千帆大模型平台”便…

【西瓜书】神经网络-MP神经元、感知机和多层网络

神经网络&#xff08;neural networks&#xff09;的定义&#xff1a;神经网络是由具有适应性的简单单元组成的广泛并行互联的网络&#xff0c;它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。&#xff08;T. Kohonen 1988年在Neural Networks创刊号上给出的定义…

《基于FPGA的便携式PWM方波信号发生器》论文分析(三)——数码管稳定显示与系统调试

一、论文概述 基于FPGA的便携式PWM方波信号发生器是一篇由任青颖、庹忠曜、黄洵桢、李智禺和张贤宇 等人发表的一篇期刊论文。该论文主要研究了一种新型的信号发生器&#xff0c;旨在解决传统PWM信号发生器在移动设备信号调控中存在的精准度低和便携性差的问题 。其基于现场可编…

一个专为云原生环境设计的高性能分布式文件系统

大家好&#xff0c;今天给大家分享一款开源创新的分布式 POSIX 文件系统JuiceFS&#xff0c;旨在解决海量云存储与各类应用平台&#xff08;如大数据、机器学习、人工智能等&#xff09;之间高效对接的问题。 项目介绍 JuiceFS 是一款面向云原生设计的高性能分布式文件系统&am…

【JavaScript】图解JS中的字符串方法

&#x1f4af; 欢迎光临清清ww的博客小天地&#x1f4af; &#x1f525; 个人主页:【清清ww】&#x1f525; &#x1f4da; 系列专栏:vue3 | TypeScript &#x1f4da; &#x1f31f; 学习本无底&#xff0c;前进莫徬徨。&#x1f31f; 目录 一.字符串查找 1.length属性 2. i…

ffmpeg视频滤镜:替换部分帧-freezeframes

滤镜描述 freezeframes 官网地址 > FFmpeg Filters Documentation 这个滤镜接收两个输入&#xff0c;然后会将第一个视频中的部分帧替换为第二个视频的某一帧。 滤镜使用 参数 freezeframes AVOptions:first <int64> ..FV....... set first fra…

云计算-华为HCIA-学习笔记

笔者今年7月底考取了华为云计算方向的HCIE认证&#xff0c;回顾从IA到IE的学习和项目实战&#xff0c;想整合和分享自己的学习历程&#xff0c;欢迎志同道合的朋友们一起讨论&#xff01; 第三章&#xff1a;常见设备 交换机 二层交换机和三层交换机&#xff0c;所谓二层交换机…

问题记录-Java后端

问题记录 目录 问题记录1.多数据源使用事务注意事项&#xff1f;2.mybatis执行MySQL的存储过程&#xff1f;3.springBoot加载不到nacos配置中心的配置问题4.服务器产生大量close_wait情况 1.多数据源使用事务注意事项&#xff1f; 问题&#xff1a;在springBoot项目中多表处理数…

瑞派宠物医生 | 热爱与实践交织,专注宠物口腔健康

热爱与实践交织的兽医梦 瑞派上海乔登宠物医院院长陈德举自小便与赛鸽结下了不解之缘&#xff0c;家族中饲养赛鸽的传统不仅让他对鸟类产生了浓厚的兴趣&#xff0c;更在心中埋下了成为一名兽医的种子。在面临高考这一人生重要抉择时&#xff0c;他毫不犹豫地选择了兽医专业&am…