ELK 日志收集系统
运维交付497 字预计 1 分钟阅读
详解如何使用 Elasticsearch、Logstash 和 Kibana 搭建企业级集中式日志分析平台。
引言
在分布式微服务架构中,一次请求可能会经过多个服务节点的处理,产生极其分散的日志文件。当线上发生故障时,如果让运维或开发人员去每台服务器上 tail -f 查找日志,不仅效率低下,更无法进行多维度分析。ELK 系统为此提供了完美的日志集中化解决方案。
ELK 三剑客的角色定位
企业级 ELK 日志栈通常由以下几部分构成:
1. Filebeat / Logstash (日志采集与预处理)
- Filebeat:作为轻量级的日志收集器,常部署在业务节点上。由于其采用 Go 语言编写,只负责将原生的日志文件增量读取并传输,因此资源消耗极低。
- Logstash:使用 Java 编写,功能强大,擅长对各种异构日志进行复杂的过滤、结构化解析(如使用 Grok 正则提取字段)和转换,然后统一写入到后端存储中。
2. Elasticsearch (日志存储与全文检索)
作为 ELK 的核心,它是一个基于 Lucene 的开源分布式搜索和分析引擎。它可以对写入的海量非结构化文本建立倒排索引,实现毫秒级的关键词全文搜索。
3. Kibana (日志可视化与查询)
提供了一个直观的 Web 界面,让开发和运维团队能够方便地通过 Lucene 查询语法筛选日志,并能生成各种柱状图、趋势图来直观展现系统运行状态。
生产级 ELK 架构的调优
在面临高并发写入场景下,Logstash 频繁处理复杂的 Grok 解析会导致 CPU 极高。可以引入消息队列(如 Kafka)作为数据缓冲区:
Filebeat ──> Kafka ──> Logstash ──> Elasticsearch ──> Kibana
引入 Kafka 不仅能解决突发日志峰值带来的背压(Backpressure)问题,还能防止在 Elasticsearch 重启或卡顿期间发生日志丢失。