ELK—— Elasticsearch & Logstash & Kibana

ELK 是一套强大的开源日志管理和分析解决方案,它通过三个核心组件 ​Elasticsearch、Logstash​ 和 ​Kibana​ 的协同工作,帮助用户实现从日志收集、处理、存储到可视化的全链路管理。

组件

核心功能

角色定位

​Elasticsearch (ES)​​

分布式搜索和分析引擎,负责存储和检索数据

整个架构的大脑,提供快速搜索和强大的数据分析能力

​Logstash​

数据收集和处理管道,负责数据的采集、过滤和转换​

数据流的搬运工和加工厂,将原始日志处理成适合存储的格式。

​Kibana​

数据可视化平台,提供图形化界面用于数据探索和展示

面向用户的窗口,将存储在 ES 中的数据以图表和仪表盘形式呈现。

 

 

 

 

 

 

 

🔎 核心组件深度解析

  • ​Elasticsearch:存储与检索的引擎

    • 它的核心优势在于能够快速处理海量数据。
    • 其数据模型可以类比传统数据库来理解:​索引(Index)​​ 类似于数据库中的表,是存储一类数据的地方;文档(Document)​​ 是索引中的一条条记录,以 JSON 格式存储;为了分散数据压力,一个索引可以被分成多个 ​分片(Shard)​,并且可以有 ​副本(Replica)​​ 来提高可用性和读取性能
    • Elasticsearch 集群由多个 ​节点(Node)​​ 组成,节点有不同的角色,如主节点、数据节点、协调节点等,共同协作实现高可用和可扩展性
  • Logstash:数据处理的管道
    • Logstash 是一个强大的数据处理流水线,其工作流程清晰分为三个阶段:
    1. ​Input(输入)​​:从各种数据源(如日志文件、数据库、消息队列等)收集数据。
    2. ​Filter(过滤)​​:对收集到的原始数据进行清洗、解析和转换。常用插件包括 grok(用于解析复杂的非结构化文本)、mutate(修改字段)和 date(处理时间戳)等。
    3. ​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)简单易用,但存在单点故障风险和性能瓶颈。为了解决这些问题,在实际生产中通常会引入其他组件,形成更健壮的架构

  1. ​引入 Beats 进行轻量级采集​
    • Beats 平台包含一系列轻量级数据采集器(如用于采集日志文件的 ​Filebeat、采集系统指标的 ​Metricbeat),它们用 Go 语言编写,资源占用极低
    • 在这种 ​ELK​ 架构中,Beats 负责在客户端采集数据,然后发送给 Logstash 进行深度处理,有效减轻了数据源服务器的压力(Logstash 在处理复杂过滤时 CPU 消耗较大)
  2. 引入消息队列(如 Kafka)应对高并发
    • 在日志量非常巨大的高并发场景下,为了应对流量高峰,避免数据丢失,并实现组件间解耦,会在 Beats 和 Logstash 之间加入 ​Kafka​ 或 ​Redis​ 等消息队列
    • 消息队列起到“削峰填谷”的缓冲作用,架构变为:Beats -> Kafka -> Logstash -> Elasticsearch -> Kibana,这使得系统整体的稳定性和可扩展性大大增强

 

 

一 . Elasticsearch

ES是一个特定类型的NoSQL数据库,是一个分布式搜索和分析引擎。

  1. 文档型数据模型:Elasticsearch 的基本存储单元是 ​文档(Document)​,这些文档是灵活的 JSON 格式
  2. 为搜索而生:Elasticsearch 的核心优势在于其强大的搜索能力,这主要得益于其底层使用的 ​倒排索引(Inverted Index)。简单来说,倒排索引就像一本书末尾的索引表,它记录每个词语(term)出现在哪些文档中。当搜索时,Elasticsearch 可以快速定位到包含关键词的所有文档,并利用相关度评分算法(如 TF-IDF、BM25)对结果进行排序。
  3. 分布式与高可用:Elasticsearch 被设计为分布式的。一个索引(Index)可以被分成多个 ​分片(Shard)​,这些分片可以分布在集群的不同节点上,这不仅提升了存储容量,也实现了并行处理,提高了性能。同时,每个分片都可以配置一个或多个 ​副本(Replica)​,副本分片在主分片不可用时能自动顶替,保证了服务的高可用性

何为倒排索引?

1.与正向索引的对比​

  为了更好地理解倒排索引,我们可以将其与传统的正向索引(Forward Index)进行对比

特性

正向索引

倒排索引

​索引方向​

文档 → 词语

​词语 → 文档​

​查询过程​

要找到包含“苹果”的文档,需扫描每一个文档的内容,检查其是否包含该词。

直接查找“苹果”这个词,​立即获取所有包含它的文档列表。

​适用场景​

适合根据文档ID获取其全部内容。

专为根据关键词快速检索相关文档而优化。

​类比​

一本书的目录,通过章节名找到页码。

一本书最后的索引,通过关键词找到它出现的所有页码。

 

 

 

 

 

 

 

 

 

2.倒排索引的组成部分

一个完整的倒排索引通常包含两个核心部分

  • ​单词词典(Term Dictionary)​​:这是一个包含了所有文档中出现过的唯一词条的集合。它是整个索引的入口,必须设计得非常高效以支持快速查找,常采用哈希表或B+树等数据结构实现

  • ​倒排列表(Posting List)​​:这是倒排索引的核心数据部分。对于词典中的每一个词条,都对应一个倒排列表。这个列表不仅记录了包含该词条的文档ID(DocID),通常还会记录一些附加信息来帮助优化搜索和排序,例如:

    • ​词频(TF, Term Frequency)​​:该词条在当前文档中出现的次数。通常,一个词在某个文档中出现得越频繁,可能意味着该文档与此词的相关性越高。

    • ​位置(Position)​​:该词条在文档中出现的具体位置(如第几个词)。这个信息对于支持短语查询​(如精确搜索“苹果手机”而不仅仅是“苹果”和“手机”)至关重要。

    • ​文档频率(DF, Document Frequency)​​:包含该词条的文档总数。这是一个全局信息,常用于计算相关性权重

 

posted on 2025-10-09 17:29  Karlkiller  阅读(54)  评论(0)    收藏  举报

导航