Elasticsearch 及其核心技术栈(ELK/Elastic Stack)介绍, Spring Boot + ELK项目实战
一、什么是 Elasticsearch?
Elasticsearch 是一个基于 Lucene 构建的分布式、高性能、RESTful 风格的全文搜索和分析引擎,具备以下特点:
✅ Elasticsearch 存储数据的基本单元是 索引(Index),相当于数据库中的库;文档(Document)相当于数据库中的行。
二、Elastic Stack 技术栈组成(原名:ELK Stack)
- Elastic Stack(ELK + Beats)是一个完整的数据采集、传输、存储、可视化平台,组成如下:
三、组件详解
1. Beats — 轻量数据采集器
Beats 是 Elastic 提供的各种轻量型客户端,部署在数据源机器上用于收集和转发数据。
常用的 Beats 工具:
→ Beats 可以将数据直接发送到 Elasticsearch 或先传给 Logstash 做处理。
2. Logstash — 数据处理与转发器
-
从多种输入源读取数据(如 Beats、Syslog、Kafka)
-
对数据进行 过滤(Filter),如解析 JSON、正则提取字段、日期转换等
-
输出到 Elasticsearch、文件、Kafka 等目标
示例配置片段:
input { beats { port => 5044 } }filter { grok { match => { \"message\" => \"%{COMMONAPACHELOG}\" } }}output { elasticsearch { hosts => [\"localhost:9200\"] } }
3. Elasticsearch — 搜索与分析引擎
-
使用 倒排索引 实现高性能文本搜索
-
支持 全文检索、模糊匹配、聚合统计、分页排序
-
天然支持分布式、高可用架构
基础术语:
4. Kibana — 可视化界面
-
通过 Web UI 查询、过滤、聚合 Elasticsearch 中的数据
-
支持实时监控、仪表盘展示、图表可视化(柱状图、折线图、饼图等)
-
还能管理索引模板、监控日志、设置告警(与 Watcher 结合)
常用功能:
-
Discover:快速搜索日志
-
Dashboard:自定义图表仪表盘
-
Lens:拖拽式图表构建工具
-
Dev Tools:开发控制台(ES 查询 DSL)
四、应用场景
Elastic Stack 被广泛用于以下领域:
五、Elastic Stack 数据流简图
+-------------+ +-----------+ +------------------+ +---------+| 数据源 | -----> | Beats | -----> | Logstash | -----> |Elastic || (Log/API) | | | | (可选,用于处理) | |Search |+-------------+ +-----------+ +------------------+ +---------+ | ↓ +---------+ | Kibana | +---------+
六、总结
完整的 Spring Boot + ELK(Elasticsearch + Logstash + Kibana + Filebeat) 日志采集和可视化分析的项目实战
目标
通过 Filebeat → Logstash → Elasticsearch → Kibana,采集 Spring Boot 应用的日志,并在 Kibana 中进行查询与可视化展示。
一、环境依赖(建议使用 Docker Compose 快速搭建)
你需要准备以下服务:
✅ Spring Boot 应用
✅ Elasticsearch
✅ Logstash
✅ Kibana
✅ Filebeat
二、使用 Docker Compose 搭建 ELK + Filebeat 环境
1. docker-compose.yml 示例配置
version: \"3.7\"services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0 container_name: elasticsearch environment: - discovery.type=single-node - ES_JAVA_OPTS=-Xms512m -Xmx512m ports: - \"9200:9200\" networks: - elk logstash: image: docker.elastic.co/logstash/logstash:7.17.0 container_name: logstash ports: - \"5044:5044\" volumes: - ./logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf networks: - elk depends_on: - elasticsearch kibana: image: docker.elastic.co/kibana/kibana:7.17.0 container_name: kibana ports: - \"5601:5601\" environment: ELASTICSEARCH_HOSTS: http://elasticsearch:9200 networks: - elk depends_on: - elasticsearch filebeat: image: docker.elastic.co/beats/filebeat:7.17.0 container_name: filebeat user: root volumes: - ./filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml - ./spring-logs:/app/logs networks: - elk depends_on: - logstashnetworks: elk:
三、Logstash 配置(logstash.conf)
input { beats { port => 5044 }}filter { grok { match => { \"message\" => \"%{TIMESTAMP_ISO8601:timestamp} \\[%{LOGLEVEL:level}\\] %{GREEDYDATA:message}\" } } date { match => [\"timestamp\", \"ISO8601\"] }}output { elasticsearch { hosts => [\"http://elasticsearch:9200\"] index => \"springboot-logs-%{+YYYY.MM.dd}\" }}
四、Filebeat 配置(filebeat.yml)
filebeat.inputs: - type: log enabled: true paths: - /app/logs/*.logoutput.logstash: hosts: [\"logstash:5044\"]processors: - add_host_metadata: ~ - add_cloud_metadata: ~
五、Spring Boot 配置日志输出
1. application.yml 配置日志文件路径:
logging: file: name: ./spring-logs/app.log level: root: INFO
2. 示例日志格式(logback-spring.xml 可选):
<configuration> <appender name=\"FILE\" class=\"ch.qos.logback.core.FileAppender\"> <file>./spring-logs/app.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] %msg%n</pattern> </encoder> </appender> <root level=\"info\"> <appender-ref ref=\"FILE\"/> </root></configuration>
六、启动所有服务
docker-compose up -d
七、访问和验证
-
Elasticsearch: http://localhost:9200
-
Kibana: http://localhost:5601
-
在 Kibana 中操作:
打开 Kibana → Stack Management → Index Patterns -
创建索引模式:springboot-logs-*
-
去 Discover 页面即可看到日志
-
创建 Dashboard、图表分析日志级别、错误次数、服务响应时间等
示例图表可视化内容(在 Kibana Dashboard)
-
日志数量随时间变化
-
不同级别日志(INFO / ERROR / WARN)分布饼图
-
错误关键词搜索(如 NullPointerException)
-
系统活跃度趋势分析图