搞懂 ELK 日志系统架构,这一篇就够了(含实战图解)

随着系统架构的不断扩展和业务规模的迅猛增长,传统的日志管理方式已经难以应对海量分布式系统中的日志收集、查询和告警需求。为此,越来越多的企业开始引入成熟的日志系统方案,Elastic Stack(即 ELK + Beats) 便是其中最流行的一种。
本文将从日志系统的必要性讲起,深入剖析 ELK 各组件的工作原理、使用方式以及实际部署方式,帮助你全面理解并快速上手这一强大的日志平台。
为什么我们需要日志系统?
在现代微服务架构下:
业务发展迅猛,服务器节点数量爆炸式增长;
应用日志、访问日志、错误日志源源不断地产生;
开发人员需要登录多台服务器逐一排查问题,效率低、成本高。
因此,集中式日志系统 成为刚需,不仅能统一采集和处理日志,还能提升故障排查和运维效率。
什么是 Elastic Stack(ELK + Beats)
Elastic Stack 是一套开源的日志采集、处理、分析和可视化平台,通常包含以下几个核心组件:
Beats:轻量级日志采集工具家族
Beats 是 Elastic 提供的一组用于不同场景的数据采集工具,常用的包括:
ELK 系统的特点
Elastic Stack 作为日志平台,具备以下优势:
强大的日志采集能力:支持多种来源,几乎可以采集任何类型的数据;
稳定的传输机制:数据可安全传输至中心系统;
分布式架构:天生支持横向扩展,轻松应对海量日志;
强大的分析 &可视化 &告警能力:满足开发运维团队的深度分析需求。

Filebeat 架构与工作原理详解
Filebeat 是最常用的日志采集工具,主要负责将日志文件数据发送到 Logstash 或 Elasticsearch。
Filebeat 的核心组件
Prospector(勘测者):负责管理日志源,定位需要收集的文件;
Harvester(收割机):负责读取具体日志文件内容,每个文件对应一个 Harvester。
Filebeat 工作流程

Filebeat 如何记录文件状态?
默认将状态信息记录在
/var/lib/filebeat/registry
文件中;会记录“发送前的最后一行”,并在恢复时继续发送;
为每个文件生成唯一标识符,识别是否曾经采集过。
Filebeat 如何保证事件“至少被发送一次”?
每个事件的状态会本地保存;
未确认的事件会不断重试,直到成功;
即使在 Filebeat 重启后也会继续发送未确认数据。
这一机制保证了日志不会漏传,但有可能会重复(可通过后续处理规避)。
Filebeat 配置文件示例

Filebeat 下载与启动

启动命令:
或使用 Docker 部署,参考:官方文档
Logstash 的三阶段处理流程
Logstash 的处理流程包括:
Input:输入插件从各种数据源采集数据;
Filter:使用插件对数据进行清洗、转换;
Output:将清洗后的数据输出到目标系统(如 Elasticsearch、Kafka 等)。
常用的输入插件
file
:从文件系统读取(支持类似tail -f
);syslog
:监听系统日志;beats
:接收来自 Filebeat 的数据。
强大的 Filter 插件 —— Grok
grok
插件是日志结构化处理的核心,语法如下:
举例:
它会将日志分解为结构化字段,非常适合后续索引和搜索。
输出插件
支持输出至 Elasticsearch、Kafka、Redis 等目标系统。
Kibana 可视化配置步骤
浏览器访问
http://localhost:5601/
进入 kibana 页面,点击左上角的 Discover

然后点击
Create index pattern

我们可以看到会存在我们在 logstash 中配置的 index,然后填写 index pattern,(当然需要与 logstash 中的索引要有关系)点击
Next step

填写索引匹配规则

选择时间字段,然后点击
Create index pattern

然后重新回到 Discover 页面,就可以看到我们导入的内容了

搭建
这里,我提供了 elk 的 docker-compose.yml 示例,以供你参考。如果你感兴趣,可以访问 https://github.com/pudongping/polyglot-script-box/tree/master/elk
获取完整的 docker-compose 配置信息。
实践建议与总结
Elastic Stack 在日志收集、集中分析和可视化上提供了一套非常强大的方案,适合分布式系统中的复杂场景。我的经验是:
尽可能将日志标准化、结构化,方便后续检索和告警;
合理利用 Filebeat 的模块功能,节省重复造轮子的成本;
Grok 表达式需谨慎优化,性能瓶颈常见于过滤阶段;
初次部署推荐使用 Docker Compose 管理,更快速上手。
通过这篇文章,相信你已经掌握了 ELK 的核心组件、工作流程及实战部署方式。如果你正面临日志混乱、排查困难的问题,不妨试试 ELK,它或许正是你理想的解决方案!
如需更进一步的使用指南或实战部署脚本,也欢迎留言交流~
版权声明: 本文为 InfoQ 作者【左诗右码】的原创文章。
原文链接:【http://xie.infoq.cn/article/fff0802323f6bfdd9a37f6478】。文章转载请联系作者。
评论