简介
- 引言
- 在排查线上异常的过程中,查询日志总是必不可缺的一部分。现今大多采用的微服务架构,日志被分散在不同的机器上,使得日志的查询变得异常困难。
- 工欲善其事,必先利其器。如果此时有一个统一的实时日志分析平台,那可谓是雪中送碳,必定能够提高我们排查线上问题的效率。本文带您了解一下开源的实时日志分析平台 ELK 的搭建及使用。
- 介绍
- ElasticSearch:分布式,RESTful风格的搜索和分析
- 全文搜索;提供搜集、分析、存储数据三大功能,是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
- Logstash:采集、转换、充实、然后输出
- 是服务器端数据处理管道,能够同时从多个来源采集、转换数据,然后将数据发送到诸如 Elasticsearch 等"存储库"中。
- Kibana:实现数据可视化,在Elastic Stack中进行导航
- 让运维同学在PC端使用图形和图表对数据进行可视化。
- 三者关系
- Logstash把数据从"NGINX"、"SpringBoot"中取出, 并保存到ES中,然后由Kibana在在ES中取出数据在页面上展示。
- 介绍三大组件
- ELK 实现方案

- ELK 的大致工作流程

操作使用
- 在 Spring Boot 中使用 ELK
- 首先我们需要创建一个 Spring Boot 的项目,之前我写过一篇文章介绍 如何使用 AOP 来统一处理 Spring Boot 的 Web 日志 ,本文的 Spring Boot 项目就建立在这篇文章的基础之上。
- 修改并部署 Spring Boot 项目
- 在项目 resources 目录下创建 spring-logback.xml 配置文件。
| <?xml version="1.0" encoding="UTF-8"?> |
| <configuration debug="false"> |
| <contextName>Logback For demo Mobile</contextName> |
| <property name="LOG_HOME" value="/log" /> |
| <springProperty scope="context" name="appName" source="spring.application.name" |
| defaultValue="localhost" /> |
| ... |
| |
| <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| ... |
| <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> |
| <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} ${appName} -%msg%n</pattern> |
| </encoder> |
| ... |
| </appender> |
| ... |
| </configuration> |
- 打包并部署 Spring Boot 项目
| # 打包命令 |
| mvn package -Dmaven.test.skip=true |
| # 部署命令 |
| java -jar sb-elk-start-0.0.1-SNAPSHOT.jar |
- 生成日志
- logback 配置文件中我将日志存放在 /log/sb-log.log 文件中,执行 more /log/sb-log.log 命令,出现以下结果表示部署成功。
- Shipper 角色的 Logstash 的配置
| input { |
| file { |
| path => [ |
| |
| "/log/sb-log.log" |
| ] |
| } |
| } |
| |
| output { |
| |
| redis { |
| host => "10.140.45.190" |
| port => 6379 |
| db => 8 |
| data_type => "channel" |
| key => "logstash_list_0" |
| } |
| } |
- Indexer 角色的 Logstash 的配置
| input { |
| redis { |
| host => "192.168.142.131" |
| port => 6379 |
| db => 8 |
| data_type => "channel" |
| key => "sb-logback" |
| } |
| } |
| |
| filter { |
| |
| grok { |
| match => { "message" => "%{TIMESTAMP_ISO8601:time} \[%{NOTSPACE:threadName}\] %{LOGLEVEL:level} %{DATA:logger} %{NOTSPACE:applicationName} -(?:.*=%{NUMBER:timetaken}ms|)"} |
| } |
| } |
| |
| output { |
| stdout {} |
| elasticsearch { |
| hosts => "localhost:9200" |
| index => "logback" |
| } |
| } |
- ELK 后台启动
| [program:elasticsearch] |
| environment=JAVA_HOME="/usr/java/jdk1.8.0_221/" |
| directory=/home/elk/elk/elasticsearch |
| user=elk |
| command=/home/elk/elk/elasticsearch/bin/elasticsearch |
| |
| [program:logstash] |
| environment=JAVA_HOME="/usr/java/jdk1.8.0_221/" |
| directory=/home/elk/elk/logstash |
| user=elk |
| command=/home/elk/elk/logstash/bin/logstash -f /home/elk/elk/logstash/indexer-logstash.conf |
| |
| [program:kibana] |
| environment=LS_HEAP_SIZE=5000m |
| directory=/home/elk/elk/kibana |
| user=elk |
| command=/home/elk/elk/kibana/bin/kibana |
- 转载出处:https://mp.weixin.qq.com/s/nOVQAZWKzMhGJDOayVuiPA 文章出自: [微信公众号_Java笔记虾]的博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~