当前位置: 首页 > news >正文

企业级Java项目整合ELK日志收集分析可视化

三种方案

在这里插入图片描述

一、准备工作 - 规范 Java 应用日志输出

①、使用 SLF4J 门面 + Logback 实现

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>2.0.9</version>
</dependency>
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.4.11</version>
</dependency>

②、配置JSON 格式输出(强烈推荐)

需要额外添加 logstash-logback-encoder 依赖来支持 JSON 输出:

<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.4</version>
</dependency>

logback-spring.xml 配置示例

<configuration><appender name="JSON" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/app.json.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/app.json.log.%d{yyyy-MM-dd}.%i.gz</fileNamePattern><maxFileSize>100MB</maxFileSize><maxHistory>30</maxHistory></rollingPolicy><encoder class="net.logstash.logback.encoder.LogstashEncoder"><!-- 添加自定义字段,便于在Kibana中区分应用和環境 --><customFields>{"application": "user-service", "environment": "production"}</customFields><!-- 包含上下文信息,如线程名 --><includeContext>true</includeContext><!-- 设置日志输出时间格式 --><timestampPattern>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampPattern></encoder></appender><root level="INFO"><appender-ref ref="JSON" /></root>
</configuration>

二、部署 ELK/EFK 服务端组件

①、安装 Elasticsearch

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.11.1-linux-x86_64.tar.gz
tar -xzf elasticsearch-8.11.1-linux-x86_64.tar.gz
cd elasticsearch-8.11.1/

配置 (config/elasticsearch.yml):

cluster.name: production-cluster
node.name: node-1
network.host: 0.0.0.0 # 允许远程访问
http.port: 9200
discovery.type: single-node # 如果是单节点测试,生产环境需配置多节点集群
xpack.security.enabled: false # 测试可先关闭安全配置,生产环境必须开启!

启动

./bin/elasticsearch -d # 后台运行

②、安装 Logstash(用于集中处理)

下载并安装:

wget https://artifacts.elastic.co/downloads/logstash/logstash-8.11.1-linux-x86_64.tar.gz
tar -xzf logstash-8.11.1-linux-x86_64.tar.gz
cd logstash-8.11.1/

创建配置文件 (config/logstash.conf):

# 输入:监听5044端口,接收来自Filebeat的数据
input {beats {port => 5044}
}# 过滤器:解析和丰富数据
filter {# 如果Filebeat发送的是JSON日志,直接解析JSON内容json {source => "message"remove_field => ["message"] # 解析后可移除原始message字段}# 你可以添加更多处理,例如解析时间戳、Grok匹配非JSON日志、添加字段等date {match => ["timestamp", "ISO8601"]target => "@timestamp"}
}# 输出:发送到Elasticsearch
output {elasticsearch {hosts => ["http://your-elasticsearch-ip:9200"]index => "%{[@metadata][beat]}-%{[environment]}-%{+YYYY.MM.dd}" # 示例:filebeat-production-2023.12.01# user => "elastic"# password => "your_password"}# 可选: stdout { codec => rubydebug } # 用于调试,会在控制台打印输出
}

启动

./bin/logstash -f config/logstash.conf --config.reload.automatic &

③、安装 Kibana

下载并安装

wget https://artifacts.elastic.co/downloads/kibana/kibana-8.11.1-linux-x86_64.tar.gz
tar -xzf kibana-8.11.1-linux-x86_64.tar.gz
cd kibana-8.11.1/

配置 (config/kibana.yml):

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://your-elasticsearch-ip:9200"]
# elasticsearch.username: "kibana_system"
# elasticsearch.password: "your_password"

启动

./bin/kibana &

验证: 访问 http://:5601

三、在应用服务器部署与配置 Filebeat

①、下载并安装 Filebeat

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.11.1-linux-x86_64.tar.gz
tar -xzf filebeat-8.11.1-linux-x86_64.tar.gz
cd filebeat-8.11.1-linux-x86_64/

②、配置 Filebeat (filebeat.yml)

filebeat.inputs:
- type: filestreamenabled: truepaths:- /path/to/your/java/app/logs/*.json.log # 指向你的JSON日志路径json.keys_under_root: true # 重要:尝试解码JSON行json.overwrite_keys: true   # 用解析后的JSON字段覆盖Filebeat的默认字段fields:environment: production # 添加环境标签application: user-service # 添加应用名标签fields_under_root: true # 将这些标签提升到顶级字段# 输出:发送到Logstash进行处理
output.logstash:hosts: ["your-logstash-server-ip:5044"]

③、启动 Filebeat

sudo ./filebeat -e -c filebeat.yml &

四、在 Kibana 中查看日志

①、配置索引模式(Index Pattern)

在 Kibana 左侧菜单进入 Management > Stack Management。

进入 Data Views,点击 Create data view。

输入索引模式名称,例如 filebeat-*。

选择 @timestamp 作为时间字段。

创建。

②、查看和分析日志

进入 Analytics > Discover。

选择你刚创建的 filebeat-* 数据视图。

你现在可以看到所有被收集的日志了。你可以:

使用 KQL(Kibana Query Language) 搜索特定日志,例如 application: “user-service” and level: “ERROR”。

筛选特定时间范围。

点击任意日志条目查看其完整的结构化 JSON 字段。

企业级进阶配置

权限与安全:启用 Elasticsearch 和 Kibana 的 xpack.security,配置 TLS 加密通信。

索引生命周期管理 (ILM):配置策略自动管理索引(如热节点保留7天,冷节点保留30天后删除),节省成本和存储空间。

告警:使用 Kibana 的告警功能,对特定的错误日志(如 ERROR 日志过多)触发告警,通知到邮件、Slack 等。

仪表板:在 Dashboard 中创建可视化图表,监控错误趋势、不同级别的日志数量等。

http://www.dtcms.com/a/349525.html

相关文章:

  • [论文阅读]RQ-RAG: Learning to Refine Queries for Retrieval Augmented Generation
  • 大模型知识--MCP
  • 无人机芯片休眠模式解析
  • Linux系统的网络管理(一)
  • 血缘元数据采集开放标准:OpenLineage Integrations Apache Spark Main Concepts Installation
  • 05 开发环境和远程仓库Gitlab准备
  • 【spring进阶】spring应用内方法调用时长统计
  • 【数据结构】串——(一)
  • 36 NoSQL 注入
  • Docker 部署 GitLab 并开启 SSH 使用详解
  • 【Java后端】Java 多线程:从原理到实战,再到高频面试题
  • Claude Code 使用及配置智能体
  • 【科研绘图系列】R语言绘制代谢物与临床表型相关性的森林图
  • 从零到一:现代化充电桩App的React前端参考
  • 将FGUI的Shader全部预热后,WebGL平台没有加载成功
  • 基于MalConv的恶意软件检测系统设计与实现
  • 大模型 transformer 步骤
  • 《拉康精神分析学中的欲望辩证法:能指的拓扑学与主体的解构性重构》
  • 计算机大数据技术不会?医院体检数据可视化分析系统Django+Vue全栈方案
  • 不止效率工具:AI 在文化创作中如何重构 “灵感逻辑”?
  • 【DFS 或 BFS 或拓扑排序 - LeetCode】329. 矩阵中的最长递增路径
  • 【图像算法 - 23】工业应用:基于深度学习YOLO12与OpenCV的仪器仪表智能识别系统
  • 基于视觉的果园无人机导航:一种基于干预模仿学习与VAE控制器的真实世界验证
  • 机器人中的李代数是什么
  • 抖音多账号运营新范式:巨推AI如何解锁流量矩阵的商业密码
  • 量子计算驱动的Python医疗诊断编程前沿展望(下)
  • 数据结构:单向链表的逆置;双向循环链表;栈,输出栈,销毁栈;顺序表和链表的区别和优缺点;0825
  • 平安产险青海分公司启动2025年“乡风文明100行动” 首站落地海东市乐都区土官沟村
  • 【C++详解】哈希表概念与实现 开放定址法和链地址法、处理哈希冲突、哈希函数介绍
  • Redis缓存雪崩缓存击穿缓存穿透的处理方式