带你读《Elastic Stack 实战手册》之76:——4.2.2.Elasticsearch智能巡检开发设计实践(2)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《Elastic Stack 实战手册》之76:——4.2.2.Elasticsearch智能巡检开发设计实践(2)

《Elastic Stack 实战手册》——四、应用实践——4.2 可观测性应用场景 ——4.2.2.Elasticsearch智能巡检开发设计实践(1) https://developer.aliyun.com/article/1226096



指标分析

 

cluster 层面指标分析

 

cluster status

 

集群健康状态,检测到集群状态非 green,则说明巡检异常结果未处理,或者突发情况导致,此时巡检的意义是快速的给出推荐解决方案,让运维、集群 owner(开发)能够有处理的方案,并非一味依赖告警等待运维处理,最大限度的减少异常带来的影响;

 非 green 状态下,首先检查的是节点个数是否符合预期,节点数量正常情况下,通常通过

explain API进行分析。


GET /_cluster/allocation/explain
{
  "index":"index_name",
  "shard": 1,
  "primary":false
}

分片 allocation 是通过分配器和决策器来决定的,explain API 通过决策器的信息来体现

unassigned shard 的异常原因,allocation 原理图如下:


image.png

详细流程图链接:https://www.processon.com/view/link/5f43b268e401fd5f24852544


该部分只要非 green 状态即为异常,智能巡检系统会分析出异常原因,并给出推荐解决方案到最终的报告中,如果是出现 red 场景或者 OOM 导致掉节点场景,则会由告警平台即时通知到用户和 OPS,用户和 OPS 可以通过在 PAAS 平台记录的报告,快速查看状态异常的分析;由于巡检系统非实时,可以手动触发智能巡检系统,快速得到最新分析报告与推荐解决方案。

 

推荐解决方案由两部分组成

 

1、一些特定场景分析后的经验建议

2、该集群所有unassigned shard通过explain API的查到的结果集。

 

pengding_task

 

pending_task 反应了 master 节点尚未执行的集群级别的更改任务(例如:创建索引,更新映射,分配分片)的列表。pending_task的任务是分级别的(优先级排序:IMMEDIATE>URGENT>HIGH>NORMAL>LOW>LANGUID),只有当上一级别的任务执行完毕后,才会执行下一级别的任务,即当出现 HIGH 级别以上的 pending_task 任务时,备份和创建索引等低级别任务将延迟执行。

 

pending_task 过多会给 master 节点造成压力,大集群(大数据量、高并发)情况下,容易造成节点被踢出集群,甚至集群不响应的情况。pending_task 积压的场景一般出现在大集群中,由于 task 不能快速处理完,会长时间处于积压状态,且会越积压越多,所以异常阈值可以设置一个较大值,根据经验值,设置 pending_task 数量大于 100 为异常;

GET _cat/pending_tasks

节点最大 cpu_util 与最小 cpu_util 之差(极差)

 

cpu_util 是判断 Elasticsearch 集群健康程度的重要指标,直接影响集群的吞吐量、请求的响应时间。一般情况下集群各个节点 cpu_util 普遍过高的场景比较好处理,增加配置即可让集群恢复健康状态。

而单节点/部分节点出现 cpu_util 过高的情况则不容易定位,如 shard 分配不均匀、routing 设置不合理、宿主机异常都有可能引发该现象,且可能在程序上线一段时间后才出现,这时巡检结果对预警与分析有重大意义。

GET _cat/nodes?h=ip,cpu

为了能够有效起到预警作用,cpu_util 极差的阈值不宜过大,同时应该考虑到角色分离、冷热分离等场景,将极差的计算范围限制到同角色节点之间。

 

data节点最大 qps 与最小 qps 之差(极差)

 

节点 qps 指标受到 shard 分配、routing 的影响,极差过大代表集群数据分配不均,或有参数干预,集群负载不均衡。

 

为该指标设置阈值时,同样需要考虑到角色分离场景,同时由于业务的不同,不同集群 qps 相差巨大,可以通过换算成瞬时流量的百分比来做极差计算。


GET /_nodes/stats/indices,ingest/search

一次 bulk 请求的数量

 

bulk 请求适用于大写入场景,由于减少了大量的连接,bulk 的效率远高于单条 index。一次 bulk 请求涉及到的 doc 数量对性能有较大影响,过小容易造成线程池堆积,过大容易造成超时。

 

该指标的阈值设置,仅针对写入/更新频率较大的集群,由于集群配置的差异,可给每个配置区间内设置一个最小值作为巡检的阈值。

 node 层面指标分析

 

uptime

 

集群节点重启往往是对集群性能有着较大影响,接收到的流量会异常,同时减少了一部分吞吐量,对于大集群而言,重建缓存、shard allocation 会对集群的响应造成影响。集群重启的原因以及重启带来的影响对于集群都是一个隐患。

 

GET _cat/nodes?h=ip,name,node.role,master,uptime

 

如果启动时间距离当前时间 1h 以内,则节点发生重启,提示用户检查重启原因、评估带来的影响。

 

free_disk

 

磁盘剩余空间最直观的就是影响数据写入,到达水位线(默认95%)后会进入 read only 状态,其次磁盘空间还会带来其他隐患,比如无法操作 forcemerge、甚至 deleteByQuery 也无法完成等。

 

GET _cat/allocation

 

出于成本与利用率的考虑,预期状态磁盘占比不应过低,一般 50% 以内为安全值,由于不同集群的特性可能会有差异,可以设置 70% 作为异常阈值。

 

cpu_util

 

CPU 对集群性能影响极大,高 CPU 的场景下,响应时间增加,可能出现大量超时(读写异常)。所以需要平衡 cpu 利用率(一般通过超分、调整配置两种方式)。

 

GET _cat/nodes?h=ip,name,cpu

出于成本与利用率的考虑,预期状态磁盘占比不应过低,一般 50% 以内为安全值,由于不同集群的特性可能会有差异,可以设置 70% 作为异常阈值。

 

cpu_util

 

CPU 对集群性能影响极大,高 CPU 的场景下,响应时间增加,可能出现大量超时(读写异常)。所以需要平衡 cpu 利用率(一般通过超分、调整配置两种方式)。


GET _cat/nodes?h=ip,name,cpu

 由于业务流量存在周期性波峰波谷,所以阈值需要在安全范围内尽量设置大一点,例如设置阈值为 "cpu_util = 90%"。

 

node上shard数

 

节点未分配 shard,则需要确认资源容量分配是否合理,该指标主要针对分片设置不合理导致的资源浪费。一般发生在分片数量设置不合理、迁移过程(存在 exclude)的场景下。故阈值可以设置为 "count(shard) = 0"。

 

GET _cat/allocation

shard层面指标分析

 

number

 

过多或过少的 shard 在一定场景下都会影响查询和写入性能。官方建议的合理的设置数量:每GB 的 heap 不超过 20个 shards; 比如 20GB heap,400个 shards, 30GB heap,不超过 600个shards。Elasticsearch 7.0 版本开始,集群中每个节点默认限制 1000个shard。

阈值按照官方建议值设定即可。

 

GET _cat/shards?h=index,shard,prirep,state,docs,store,ip,node

size of per shard

 

大量的小 shard 会影响写入和查询性能,且在同数据量情况下占用更多的内存和磁盘。单

shard 过大则有更多的弊端,例如查询耗时变长、不易于恢复、迁移、容易造成集群压力不均衡等。

 

通常单个 shard 的大小建议在 10GB - 65GB 之间 (经验值参考:搜索类控制在 20GB,日志类控制在 50BG),查询 API 同上。


官方建议shard size、count值参考:

https://www.elastic.co/guide/en/elasticsearch/reference/current/size-your-shards.html

 


《Elastic Stack 实战手册》——四、应用实践——4.2 可观测性应用场景 ——4.2.2.Elasticsearch智能巡检开发设计实践(3) https://developer.aliyun.com/article/1226092

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
5月前
|
运维 监控 Java
探索Elasticsearch在Java环境下的全文检索应用实践
【6月更文挑战第30天】在大数据背景下,Elasticsearch作为分布式搜索分析引擎,因其扩展性和易用性备受青睐。本文指导在Java环境中集成Elasticsearch,涉及安装配置、使用RestHighLevelClient连接、索引与文档操作,如创建索引、插入文档及全文检索查询。此外,还讨论了高级查询、性能优化和故障排查,帮助开发者高效处理非结构化数据全文检索。
169 0
|
2月前
|
存储 关系型数据库 MySQL
浅谈Elasticsearch的入门与实践
本文主要围绕ES核心特性:分布式存储特性和分析检索能力,介绍了概念、原理与实践案例,希望让读者快速理解ES的核心特性与应用场景。
|
3月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
19145 21
|
1月前
|
开发框架 监控 搜索推荐
GoFly快速开发框架集成ZincSearch全文搜索引擎 - Elasticsearch轻量级替代为ZincSearch全文搜索引擎
本文介绍了在项目开发中使用ZincSearch作为全文搜索引擎的优势,包括其轻量级、易于安装和使用、资源占用低等特点,以及如何在GoFly快速开发框架中集成和使用ZincSearch,提供了详细的开发文档和实例代码,帮助开发者高效地实现搜索功能。
118 0
|
1月前
|
消息中间件 监控 关系型数据库
MySQL数据实时同步到Elasticsearch:技术深度解析与实践分享
在当今的数据驱动时代,实时数据同步成为许多应用系统的核心需求之一。MySQL作为关系型数据库的代表,以其强大的事务处理能力和数据完整性保障,广泛应用于各种业务场景中。然而,随着数据量的增长和查询复杂度的提升,单一依赖MySQL进行高效的数据检索和分析变得日益困难。这时,Elasticsearch(简称ES)以其卓越的搜索性能、灵活的数据模式以及强大的可扩展性,成为处理复杂查询需求的理想选择。本文将深入探讨MySQL数据实时同步到Elasticsearch的技术实现与最佳实践。
85 0
|
3月前
|
存储 运维 搜索推荐
运维开发.索引引擎ElasticSearch.倒序索引的概念
运维开发.索引引擎ElasticSearch.倒序索引的概念
52 1
|
5月前
|
存储 监控 固态存储
elasticsearch索引生命周期管理(ILM):原理和实践
elasticsearch索引生命周期管理(ILM):原理和实践
|
5月前
|
存储 JSON API
Elasticsearch中的模板:定义、作用与实践
Elasticsearch中的模板:定义、作用与实践
|
5月前
|
搜索推荐 Java 数据库
Java中的ElasticSearch集成与实践
Java中的ElasticSearch集成与实践
|
6月前
|
数据采集 数据挖掘 索引
Elasticsearch “指纹”去重机制,你实践中用到了吗?
Elasticsearch “指纹”去重机制,你实践中用到了吗?
84 7

相关产品

  • 检索分析服务 Elasticsearch版