干货满满丨万字超全 ElasticSearch 监控指南

本文详细介绍了ElasticSearch,包括其特点、基本概念和适用场景。阐述了搜索、索引等六类监控关键指标,展示了集群和索引大盘配置示例。分析了查询和索引性能差的典型问题及解决办法,还对比了自建与腾讯云Prometheus监控系统搭建的优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导语:本文详细介绍了 ElasticSearch 如搜索性能指标、索引性能指标、内存使用和垃圾回收指标等六类监控关键指标、集群和索引两类大盘配置示例,以及 ES 在查询性能差、索引性能差的两种典型问题场景下详细的原因、排查方式和解决方案,同时也介绍了如何通过 Prometheus 监控搭建可靠的监控系统,详尽全面,推荐给大家,也欢迎各位一起交流。

 1. ElasticSearch 简介

1.1 概要

ElasticSearch (简称ES)是一个分布式、免费、开放的搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据,最初由 Elastic 开发并开源。它本质上是一个分布式数据库,底层基于 Lucene 实现。ElasticSearch 屏蔽了 Lucene 的底层细节,提供了分布式特性,同时对外提供了 Restful API。ElasticSearch 以其易用性迅速赢得了许多用户,被用在网站搜索、日志分析等诸多方面。由于 ES 强大的横向扩展能力,甚至很多人也会直接把 ES 当做 NoSQL 来用。

1.2 特点

  • 实时性:ElasticSearch 能够实时地存储、检索和分析数据,使得用户能够快速获得最新的搜索结果和分析数据;

  • 分布式:ElasticSearch 采用分布式架构,能够水平扩展,处理 PB 级结构化或非结构化数据,同时具有高可用性和容错性;

  • 多样化的搜索和分析功能:ElasticSearch 支持全文搜索、结构化查询、过滤、地理空间查询和复杂的分析功能;

  • 可扩展性:ElasticSearch 提供了丰富的插件和 API,可以轻松地扩展其功能。

1.3 基本概念

节点(Node)

ElasticSearch 是以集群的方式运行的,而节点是组成 ES 集群的基本单位,所以每个 ElasticSearch 实例就是一个节点,每个物理机器上可以有多个节点,使用不同的端口和节点名称。


节点按主要功能可以分为三种:主节点(Master Node),协调节点(Coordianting Node)和数据节点(Data Node)。

  • 主节点:处理创建,删除索引等请求,维护集群状态信息。可以设置一个节点不承担主节点角色;

  • 协调节点:负责处理请求。默认情况下,每个节点都可以是协调节点;

  • 数据节点:用来保存数据。可以设置一个节点不承担数据节点角色。

集群(Cluster)

ElasticSearch 是一个分布式的搜索引擎,所以一般由多台物理机组成。而在这些机器上通过配置一个相同的 cluster name,可以让其互相发现从而把自己组织成一个集群。

分片 & 副本(Shards & Replicas)

索引可以存储大量的数据,可能会超过单个节点的硬件限制,而且会导致单个节点效率问题。ES 提供了将单个 Index 拆分到多个 Shard 上的能力,可以支持水平扩展,分布式和并行跨 Shard 操作(可能在多个节点),从而提高了性能和吞吐量。


为了避免故障导致节点及分片出现问题,ES 可以为分片设置副本(Replicas),副本通常在不同的节点上,从而保证高可用性。

Index (索引)

Index(索引) 是具有稍微类似特征文档的集合,同在一个索引中的文档共同建立倒排索引。类似于 MySQL 中的 database 概念,但 ES 中的 Index 更加灵活,用起来也更加方便。提交给同一个索引中的文档,最好拥有相同的结构。这样对于 ES 来说,不管是存储还是查询,都更容易优化。

类型(Type)

Document 的类型,类似于关系型数据库中的表的概念。该概念在6.X 时还可以使用,但在 Type 的概念已在7.X 开始废弃,官方认为这是个错误的设计。

Document (文档)

文档是 ES 索引的基本单位,每个索引都是由数量众多的文档组成,Document 相当于传统数据库中的行,ES 中数据以 JSON 的形式来表示。

字段(Fields)

每个 Document 都类似一个 JSON 结构,它包含了许多字段,每个字段都有其对应的值,多个字段组成了一个 Document,可以类比关系型数据库数据表中的字段。

映射(mapping)

相当于数据库中的 schema,用来约束字段的数据类型,每一种数据类型都有对应的使用场景。mapping 中定义了一个文档所包含的所有 field 信息,每个文档都有映射。mapping 不是必须创建,因为 ES 中实现了动态映射。

示例

添加 Index members 的 mapping:

PUT members
{
  "mappings": {
    "properties": {
      "id": {
        "type": "long"
      },
      "name": {
        "type": "text"
      },
      "birthday": {
        "type": "date"
      }
    }
  }
}

在 Index members 中添加一个 Document:

PUT members/_doc/10086
{
    "id": 10086,
    "name": "法外狂徒张三",
    "birthday": "1990-10-24T09:00:00Z"
}

1.4 主要适用场景

  • 搜索引擎:在网站、应用或文档存储中提供全文搜索功能。例如,一个电子商务网站使用 ElasticSearch 来让用户快速搜索产品;

  • 日志和指标分析:用于收集、存储和分析日志以及指标数据。例如,一个网络应用程序使用 ElasticSearch 来存储和分析其日志文件,以便监控性能和排查问题;

  • 实时数据分析:用于实时分析和可视化大规模的实时数据。例如,一个金融机构使用 ElasticSearch 来监控交易数据和实时市场动态;

  • 内容推荐:用于根据用户偏好和行为提供个性化的内容推荐。例如,一个新闻网站使用 ElasticSearch 来推荐相关新闻文章给用户;

  • 业务指标监控:用于跟踪和监控业务指标以支持决策。例如,一个企业使用 ElasticSearch 来监控销售数据和库存情况。

2. 监控关键指标

ElasticSearch 提供了大量的指标,可以用于监控各类故障现象:

  • 搜索性能指标

  • 索引性能指标

  • 内存使用和垃圾回收指标

  • 主机级别网络系统指标

  • 集群健康和节点可用性指标

  • 资源饱和度和错误

2.1 搜索性能指标

ES 查询流程介绍

 ES 查询可以分为两种:

  • 根据 ID 查询 Doc,可实时检索写入的数据。检索流程:检索内存中 Translog → 检索磁盘 Translog → 检索磁盘 Segment;

  • 根据 query 查询 Doc,近实时检索写入的数据。检索流程:检索 filesystem cache中 segmnet → 检索磁盘 Segment。

图片

检索策略可分为三大类:

QUERY_AND_FETCH:查询完就返回整个 Doc 内容,对应根据 ID 查询 Doc;

QUERY_THEN_FETCH:先查询出对应的 Doc id ,然后再根据 Doc id 匹配去对应的文档;

DFS_QUERY_THEN_FETCH:在 QUERY_THEN_FETCH 的基础上多了算分环节。

图片

分布式场景下,查询通常分成两个阶段,以 QUERY_THEN_FETCH 为例子:

Query 阶段:

  1. 客户端发送一个 search 请求到 NODE 3 , NODE 3 会创建一个大小为 from + size 的空优先队列;

  2. Node 3 将查询请求转发到索引的每个主分片或副本分片中。每个分片在本地执行查询并添加结果到大小为 from + size 的本地有序优先队列中;

  3. 每个分片返回各自优先队列中所有文档的 ID 和排序值给协调节点,也就是 NODE 3 ,它合并这些值到自己的优先队列中来产生一个全局排序后的结果列表。

    图片

Fetch 阶段:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值