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:
      - 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展示日志图表与搜索分析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值