ELK—— Elasticsearch & Logstash & Kibana
ELK 是一套强大的开源日志管理和分析解决方案,它通过三个核心组件 Elasticsearch、Logstash 和 Kibana 的协同工作,帮助用户实现从日志收集、处理、存储到可视化的全链路管理。
组件 |
核心功能 |
角色定位 |
---|---|---|
Elasticsearch (ES) |
分布式搜索和分析引擎,负责存储和检索数据 |
整个架构的大脑,提供快速搜索和强大的数据分析能力 |
Logstash |
数据收集和处理管道,负责数据的采集、过滤和转换 |
数据流的搬运工和加工厂,将原始日志处理成适合存储的格式。 |
Kibana |
数据可视化平台,提供图形化界面用于数据探索和展示 |
面向用户的窗口,将存储在 ES 中的数据以图表和仪表盘形式呈现。 |
🔎 核心组件深度解析
-
Elasticsearch:存储与检索的引擎
- 它的核心优势在于能够快速处理海量数据。
- 其数据模型可以类比传统数据库来理解:索引(Index) 类似于数据库中的表,是存储一类数据的地方;文档(Document) 是索引中的一条条记录,以 JSON 格式存储;为了分散数据压力,一个索引可以被分成多个 分片(Shard),并且可以有 副本(Replica) 来提高可用性和读取性能
- Elasticsearch 集群由多个 节点(Node) 组成,节点有不同的角色,如主节点、数据节点、协调节点等,共同协作实现高可用和可扩展性
- Logstash:数据处理的管道
- Logstash 是一个强大的数据处理流水线,其工作流程清晰分为三个阶段:
- Input(输入):从各种数据源(如日志文件、数据库、消息队列等)收集数据。
- Filter(过滤):对收集到的原始数据进行清洗、解析和转换。常用插件包括
grok
(用于解析复杂的非结构化文本)、mutate
(修改字段)和date
(处理时间戳)等。 -
Output(输出):将处理好的数据发送到目的地,最常见的就是 Elasticsearch。
不过,由于 Logstash 基于 JVM,资源消耗相对较高,因此在资源受限或只需简单收集日志的场景下,常有其轻量级替代品出场
- Kibana:数据的可视化窗口
Kibana 是为 Elasticsearch 量身定制的可视化工具,它通过 Web 界面让用户能够轻松地与数据交互。其主要功能包括:
-
- 发现(Discover):用于交互式地查询和浏览存储在 ES 中的原始日志数据
- 可视化(Visualize):基于 ES 的聚合查询,创建各种图表,如柱状图、折线图、饼图等
- 仪表盘(Dashboard):将多个可视化图表组合在一起,形成综合监控视图,并支持联动刷新
- 管理(Management):用于管理 Kibana 的索引模式、用户权限等设置
Kibana和Grafana的区别
理解两者区别的关键在于分清 “指标” 和 “日志” 这两种不同的数据模型:
Grafana 为指标而生:它的强项是处理时间序列数据。这类数据通常是规律性采集的数值,如服务器的 CPU 使用率、网站的每秒请求数(QPS)。Grafana 的仪表盘非常适合用来观察这些指标随着时间变化的趋势、规律和异常
- Kibana 为日志而生:它的核心是处理离散的事件记录,也就是日志。每条日志都包含了事件发生时的详细上下文信息(如时间戳、错误信息、用户 ID)。Kibana 强大的搜索和过滤能力让你能像侦探一样,在海量日志中快速定位到关键事件及其关联信息
🚀 ELK 的常见架构演进
基本的 ELK 架构(Logstash -> Elasticsearch -> Kibana)简单易用,但存在单点故障风险和性能瓶颈。为了解决这些问题,在实际生产中通常会引入其他组件,形成更健壮的架构
- 引入 Beats 进行轻量级采集
- Beats 平台包含一系列轻量级数据采集器(如用于采集日志文件的 Filebeat、采集系统指标的 Metricbeat),它们用 Go 语言编写,资源占用极低
- 在这种 EFLK 架构中,Beats 负责在客户端采集数据,然后发送给 Logstash 进行深度处理,有效减轻了数据源服务器的压力(Logstash 在处理复杂过滤时 CPU 消耗较大)
- 引入消息队列(如 Kafka)应对高并发
-
- 在日志量非常巨大的高并发场景下,为了应对流量高峰,避免数据丢失,并实现组件间解耦,会在 Beats 和 Logstash 之间加入 Kafka 或 Redis 等消息队列
- 消息队列起到“削峰填谷”的缓冲作用,架构变为:Beats -> Kafka -> Logstash -> Elasticsearch -> Kibana,这使得系统整体的稳定性和可扩展性大大增强
一 . Elasticsearch
ES是一个特定类型的NoSQL数据库,是一个分布式搜索和分析引擎。
- 文档型数据模型:Elasticsearch 的基本存储单元是 文档(Document),这些文档是灵活的 JSON 格式
- 为搜索而生:Elasticsearch 的核心优势在于其强大的搜索能力,这主要得益于其底层使用的 倒排索引(Inverted Index)。简单来说,倒排索引就像一本书末尾的索引表,它记录每个词语(term)出现在哪些文档中。当搜索时,Elasticsearch 可以快速定位到包含关键词的所有文档,并利用相关度评分算法(如 TF-IDF、BM25)对结果进行排序。
- 分布式与高可用:Elasticsearch 被设计为分布式的。一个索引(Index)可以被分成多个 分片(Shard),这些分片可以分布在集群的不同节点上,这不仅提升了存储容量,也实现了并行处理,提高了性能。同时,每个分片都可以配置一个或多个 副本(Replica),副本分片在主分片不可用时能自动顶替,保证了服务的高可用性
何为倒排索引?
1.与正向索引的对比
为了更好地理解倒排索引,我们可以将其与传统的正向索引(Forward Index)进行对比
特性
正向索引
倒排索引
索引方向
文档 → 词语
词语 → 文档
查询过程
要找到包含“苹果”的文档,需扫描每一个文档的内容,检查其是否包含该词。
直接查找“苹果”这个词,立即获取所有包含它的文档列表。
适用场景
适合根据文档ID获取其全部内容。
专为根据关键词快速检索相关文档而优化。
类比
一本书的目录,通过章节名找到页码。
一本书最后的索引,通过关键词找到它出现的所有页码。
2.倒排索引的组成部分
一个完整的倒排索引通常包含两个核心部分
单词词典(Term Dictionary):这是一个包含了所有文档中出现过的唯一词条的集合。它是整个索引的入口,必须设计得非常高效以支持快速查找,常采用哈希表或B+树等数据结构实现
倒排列表(Posting List):这是倒排索引的核心数据部分。对于词典中的每一个词条,都对应一个倒排列表。这个列表不仅记录了包含该词条的文档ID(DocID),通常还会记录一些附加信息来帮助优化搜索和排序,例如:
词频(TF, Term Frequency):该词条在当前文档中出现的次数。通常,一个词在某个文档中出现得越频繁,可能意味着该文档与此词的相关性越高。
位置(Position):该词条在文档中出现的具体位置(如第几个词)。这个信息对于支持短语查询(如精确搜索“苹果手机”而不仅仅是“苹果”和“手机”)至关重要。
文档频率(DF, Document Frequency):包含该词条的文档总数。这是一个全局信息,常用于计算相关性权重
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/933730.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!