> 技术文档 > Elasticsearch 及其核心技术栈(ELK/Elastic Stack)介绍, Spring Boot + ELK项目实战

Elasticsearch 及其核心技术栈(ELK/Elastic Stack)介绍, Spring Boot + ELK项目实战


一、什么是 Elasticsearch?

Elasticsearch 是一个基于 Lucene 构建的分布式、高性能、RESTful 风格的全文搜索和分析引擎,具备以下特点:

  • 支持 全文搜索、结构化搜索、聚合分析

  • 高可用、可横向扩展,适用于大规模数据处理

  • 广泛用于日志分析、监控、业务搜索引擎、数据可视化等场景

✅ Elasticsearch 存储数据的基本单元是 索引(Index),相当于数据库中的库;文档(Document)相当于数据库中的行。

二、Elastic Stack 技术栈组成(原名:ELK Stack)

  • Elastic Stack(ELK + Beats)是一个完整的数据采集、传输、存储、可视化平台,组成如下:
组件 描述 Beats 轻量级数据采集器,安装在客户端(如服务器、容器)收集日志或指标 Logstash 数据管道工具,用于解析、过滤、转换日志数据并发送给 Elasticsearch Elasticsearch 中央存储和分析引擎,接收并存储结构化数据,支持搜索与聚合 Kibana 可视化平台,连接 Elasticsearch 展示数据,支持仪表盘和图表

三、组件详解

1. Beats — 轻量数据采集器

Beats 是 Elastic 提供的各种轻量型客户端,部署在数据源机器上用于收集和转发数据。

常用的 Beats 工具:

工具名 功能描述 Filebeat 采集日志文件,如 Nginx、Tomcat Metricbeat 收集系统和服务的运行指标 Packetbeat 网络数据包分析(网络监控) Heartbeat 检测主机或服务的可用性 Auditbeat 安全审计日志采集

→ 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 — 搜索与分析引擎

  • 使用 倒排索引 实现高性能文本搜索

  • 支持 全文检索、模糊匹配、聚合统计、分页排序

  • 天然支持分布式、高可用架构

基础术语:

名称 说明 Index 索引(数据库级别) Document 文档(数据记录) Field 字段(文档的属性) Mapping 字段结构定义 Cluster 集群,包含多个节点 Shard/Replica 分片 / 副本

4. Kibana — 可视化界面

  • 通过 Web UI 查询、过滤、聚合 Elasticsearch 中的数据

  • 支持实时监控、仪表盘展示、图表可视化(柱状图、折线图、饼图等)

  • 还能管理索引模板、监控日志、设置告警(与 Watcher 结合)

常用功能:

  • Discover:快速搜索日志

  • Dashboard:自定义图表仪表盘

  • Lens:拖拽式图表构建工具

  • Dev Tools:开发控制台(ES 查询 DSL)

四、应用场景

Elastic Stack 被广泛用于以下领域:

场景 描述 日志管理 收集服务器、应用、容器日志,统一展示分析 性能监控 监控系统性能(CPU、内存、磁盘、网络) 安全分析 审计日志分析、入侵检测、访问追踪等 搜索平台 为网站、APP、企业系统提供快速搜索功能 业务指标分析 汇总并展示订单、点击、访问、用户行为等数据

五、Elastic Stack 数据流简图

+-------------+ +-----------+ +------------------+ +---------+| 数据源 | -----> | Beats | -----> | Logstash | -----> |Elastic || (Log/API) | |  | | (可选,用于处理) | |Search |+-------------+ +-----------+ +------------------+ +---------+ |+---------+ | Kibana | +---------+

六、总结

工具 作用 关键词 Elasticsearch 搜索 + 存储 + 分析 分布式、全文检索、聚合 Logstash 数据过滤 + 转发 数据处理、解析、ETL Beats 数据采集 轻量、日志、指标、Agent 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)

  • 系统活跃度趋势分析图

总结

组件 作用 Spring Boot 应用产生日志 Filebeat 采集日志并转发 Logstash 处理并解析日志数据 Elasticsearch 存储与分析日志数据 Kibana 展示日志图表与搜索分析