Elasticsearch + Logstash + Filebeat + Kibana + Redis架构

一个经典的ELK Stack 扩展架构,引入了 Filebeat 作为轻量级日志收集器,并使用 Redis 作为缓冲/消息队列。这个组合是为了解决大规模、高吞吐量日志处理场景下的可靠性、性能和耦合度问题。

以下是该架构的详细解析:

架构组件与数据流

数据流向:
应用/服务器日志FilebeatRedis (作为缓冲队列) → Logstash (进行解析和丰富) → Elasticsearch (索引和存储) → Kibana (可视化与分析)


1. Filebeat (日志收集代理)

  • 角色轻量级采集器 (Shipper)。部署在每台需要收集日志的源服务器上。

  • 功能

    • 监控指定的日志文件或位置。

    • 将新增的日志行按事件发送出去。

    • 具备背压敏感协议,防止过载。

    • 记录文件读取偏移量 (registry),确保日志至少发送一次,避免数据丢失。

  • 优势:比直接使用 Logstash 作为采集器更轻量、资源占用更低,适合大规模部署。

2. Redis (缓冲/消息队列)

  • 角色解耦与缓冲层。这是架构中可选但非常重要的组件。

  • 功能

    • 解耦:将日志生产者 (Filebeat) 和消费者 (Logstash) 分离。Filebeat 无需知道 Logstash 的状态,只需将数据推入 Redis。Logstash 故障或维护时,Filebeat 端不受影响。

    • 缓冲峰值流量:当日志量突然激增(如应用故障疯狂打印日志),超过 Logstash 处理能力时,Redis 可以作为缓冲区暂存数据,避免数据丢失或背压传递到生产服务器。

    • 提升可靠性:作为持久化队列(取决于 Redis 配置),即使 Logstash 集群重启,数据仍保存在 Redis 中。

  • 部署建议 :通常以主从或集群模式部署,确保高可用性。

3. Logstash (日志处理管道)

  • 角色数据加工中心

  • 功能

    • 输入 :从 Redis 队列中拉取日志数据(使用 redis input 插件)。

    • 过滤:这是 Logstash 的核心。对原始日志进行解析、清洗、丰富和转换。

      • Grok:解析非结构化的日志文本(如 Apache 日志)为结构化字段。

      • Date:解析时间戳。

      • Mutate:修改字段(重命名、删除、替换等)。

      • GeoIP:根据 IP 地址添加地理位置信息。

    • 输出 :将处理后的结构化数据批量发送到 Elasticsearch(使用 elasticsearch output 插件)。

  • 优势:强大的数据处理能力,是 ELK 中实现数据标准化的关键环节。

4. Elasticsearch (搜索与分析引擎)

  • 角色索引与存储中心

  • 功能

    • 接收来自 Logstash 的结构化数据,建立倒排索引。

    • 提供分布式、近实时的搜索和分析能力。

    • 数据分片和副本机制,保障高可用性和横向扩展性。

  • 部署建议 :通常以集群模式部署。

5. Kibana (可视化平台)

  • 角色用户界面 (UI)

  • 功能

    • 从 Elasticsearch 中查询数据,创建丰富的图表、仪表盘。

    • 提供 Discover 功能进行即席查询和日志搜索。

    • 用于监控、故障排查、运营分析和安全分析。


架构优势

  1. 高性能与低影响:Filebeat 作为采集器,对业务服务器资源消耗极小。

  2. 高可靠性与解耦:Redis 的引入解耦了采集和处理环节,并提供了可靠的缓冲,防止数据在组件故障时丢失。

  3. 可扩展性

    • 可以水平扩展 Logstash 节点,从 Redis 队列中并行消费数据。

    • 可以水平扩展 Elasticsearch 集群以处理更大的数据量和查询负载。

  4. 处理能力强大:Logstash 提供了极其灵活的数据解析和丰富能力。

架构的变体与演进

  • 用 Kafka 替代 Redis :在超大规模、对可靠性和吞吐量要求更高的场景下,常用 Apache Kafka 替代 Redis。Kafka 是分布式的、持久的、支持多订阅者的消息系统,在排序、重播、分区方面更强大。

  • Elastic Agent + Ingest Pipeline :在 Elastic Stack 7.x 之后,官方推出了 Elastic Agent ,它可以集成 Filebeat 的功能,并通过 Fleet 集中管理。数据可以直接由 Elastic Agent 发送到 Elasticsearch,利用 Ingest Node 的管道进行轻量处理,从而在某些场景下简化架构,去除 Logstash 和 Redis。

    • 简化架构Filebeat/Elastic AgentElasticsearch (Ingest Pipeline)Kibana

典型部署配置要点

yaml

复制代码
# Filebeat 配置示例 (filebeat.yml)
filebeat.inputs:
- type: filestream
  paths:
    - /var/log/*.log
output.redis:
  hosts: ["redis-host:6379"]
  password: "your_password"
  key: "filebeat-logs"  # Redis 列表或通道的 Key
  db: 0

# Logstash 配置示例 (logstash.conf)
input {
  redis {
    host => "redis-host"
    port => 6379
    password => "your_password"
    key => "filebeat-logs"
    data_type => "list" # 通常使用 list 类型
  }
}
filter {
  grok { ... }
  date { ... }
}
output {
  elasticsearch {
    hosts => ["es-node1:9200", "es-node2:9200"]
    index => "logs-%{+YYYY.MM.dd}"
  }
}

总结

Filebeat + Redis + Logstash + Elasticsearch + Kibana 是一个成熟、稳健的日志处理架构,适用于中等至大规模的企业环境 。它通过分工 (Filebeat 采集、Logstash 处理、ES 存储、Kibana 展示)和缓冲 (Redis)实现了高性能、高可靠和易于扩展 的日志管理解决方案。对于追求极致简化或云原生环境,可以考虑向 Elastic Agent + Ingest Pipeline 架构演进。

相关推荐
神算大模型APi--天枢6462 小时前
从异构调度到边缘部署:国产大模型算力平台的后端开发能力拆解
大数据·人工智能·科技·架构·硬件架构
橙序员小站2 小时前
Springboot3.0并不能拯救你的屎山
java·后端·架构
武子康2 小时前
大数据-182 Elasticsearch 倒排索引底层拆解:Terms 字典、FST、SkipList 与 Lucene 索引文件
大数据·后端·elasticsearch
honortech3 小时前
外部连接 redis-server 相关配置
数据库·redis·缓存
不会写程序的未来程序员3 小时前
Redis 的内存回收机制详解
数据库·redis·缓存
不会写程序的未来程序员3 小时前
Redis 主从同步原理详解
数据库·redis·缓存
Hello.Reader3 小时前
理解 Aerospike 架构从 Client 到 Data Layer 的解析
架构
snow@li3 小时前
前端:软件开发中的秤砣理论 / 越简单越可靠 / 提炼组织架构 / 精确标定工作 / 有主干有支流 / 不追求繁琐 / 不做表面工作
前端·架构
阿拉斯攀登3 小时前
STM32 架构概述
stm32·单片机·架构