一、什么是 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:
- logstash
networks:
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/*.log
output.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 | 展示日志图表与搜索分析 |