Elasticsearch 性能调优基础知识

Elastic Stack 已成为监控任何环境或应用程序的实际解决方案。 从日志、指标和正常运行时间到性能监控甚至安全,Elastic Stack 已成为满足几乎所有监控需求的一体化解决方案。 Elasticsearch 通过提供强大的分析引擎来处理任何类型的数据,成为这方面的基石。

Elasticsearch 旨在处理 TB 级的数据。 然而,这并不意味着 Elasticsearch 或 ELK 可以开箱即用地完美处理任何工作负载。 在大多数情况下,这是由于缺乏性能调整来满足确切的监控需求。 性能调优是令许多 DevOps 和系统管理员专业人员感到沮丧的一方面。 为了在 Elasticsearch 方面缓解这个问题,我们来看看如何开始调整 Elasticsearch 集群的性能。

评估你的要求

我们当然可以将环境中的所有数据推送到 Elasticsearch,但更好的问题是这样做是否能带来任何切实的好处。 是的,将所有数据放在一个易于访问的平台中可以简化事情。 然而,推送所有数据意味着更大且快速增长的数据集。 这很快就会变得笨重、成本高昂,甚至导致性能调整几乎不可能的情况。

避免这种情况的最简单方法是了解你需要从监控平台完成什么任务,并确定需要捕获并推送到 Elasticsearch 的优先级。 对最重要的数据进行分类,并将优化重点放在集群上,以满足这些高优先级数据集的需求。 假设你通过 S3 捕获 AWS VPC 流日志,但没有主动监控它们,那么将这些数据推送到 Elasticsearch 只是为了在需要时能够分析它们,这会浪费资源。 更好的解决方案是将这些数据保存在 S3 中,并在需要时使用 AWS Athena 等工具查询数据,或者在需要高级分析功能时推送数据子集。 你节省的容量可以在其他地方更好地利用,例如 APM 或其他日志,例如将更定期使用的应用程序错误日志。

例如,如果部署的主要需求是监控指标,那么更快的摄取和处理是关键。 如果我们专注于推送日志,存储也会在优化中发挥重要作用。 这是一个平衡游戏,需要选择需要推送的内容并优化摄取管道、存储和处理。 由于业务优先级不断变化,用户必须定期评估以确定需要优化的领域并定期更新优化。

硬件

无论进行怎样的优化,如果底层硬件没有足够的资源来处理摄取、处理和存储时的数据负载,用户仍然会遇到性能问题。 由于 Elasticsearch 旨在处理更大的数据集,因此需要适当的硬件资源才能实现最佳功能。 硬件资源的主要考虑因素是CPU、RAM 和存储。 你不仅需要资源来处理数据,还需要运行所需的应用程序本身。 你可能已经为摄取节点分配了足够的资源,但如果你的 Kibana 实例没有必要的资源,则部署将无法使用。

首先确定数据的确切需求,并考虑以下因素

  • 摄入频率
  • 数据加载
  • 针对此数据运行的分析和查询的类型
  • 存储要求、数据复制、保留期限

然后根据确定的需求为部署提供资源,并提供额外的空间以适应突然的使用高峰。

磁盘大小调整的注意事项

弄清楚集群的存储需求对于确保可靠的功能至关重要。 除了简单的磁盘容量要求外,用户还应该注意其他因素,例如 watermark 设置,当节点达到 85% 容量时将停止向节点发送分片,当节点达到容量的 90% 时完全停止写入现有分片 默认情况下。

如果配置了多个副本,则应该有足够的容量来容纳所有副本。 磁盘需要有足够的容量来处理所有这些需求,以及足够的空间,以便在发生故障或需要重新平衡时从其他节点重新定位分片。

索引和分片的容量规划

用户可以在 Elasticsearch 中创建任意数量的分片和索引,但不必要的大量分片和索引将会对集群管理级别以及日常使用带来显着的性能影响。

确定正确的分片和索引数量取决于多种因素,包括

  • 可用硬件资源
  • 数据的大小和复杂性
  • 索引和分析需求、数据模型、查询需求

随着数据负载的增加,它直接影响负载,直接影响性能。 Elasticsearch 中的索引是一个或多个物理分片的逻辑分组。 更多分片意味着管理这些分片的开销更大,但查询大量较小的分片可以使每个分片的处理速度更快。 另一方面,处理相对较少的较大分片将导致更少的开销,有时在查询数据时可能会更快,但是在集群重新平衡等场景中,由于大小较大,可能需要更长的时间在不同节点之间移动分片,从而影响整个集群 表现。 Elastic 建议将以下内容作为起点。

  • 目标是将平均分片大小保持在几 GB 到几十 GB 之间。 对于基于时间的数据的用例,通常会看到 20GB 到 40GB 范围内的分片。
  • 避免大量分片问题。 节点可以容纳的分片数量与可用堆空间成正比。 作为一般规则,每 GB 堆空间的分片数量应小于 20。

最好的方法是使用我们将推送的数据进行测试以确定确切的要求。 最好在具有相对相似的数据集的临时集群中运行一些示例查询,然后在生产环境中镜像配置。

更多阅读: 

  • Elasticsearch:我的 Elasticsearch 集群中应该有多少个分片?

  • Elasticsearch:如何部署 Elasticsearch 来满足自己的要求

  • Elasticsearch:Elasticsearch 容量规划

在实际的使用中,我们还需要注意到索引的生命周期管理。对于不常用的数据,我们可以把它放入到冻层或冷层。有管索引生命周期管理的知识,可以阅读文章:

  • Elasticsearch 索引生命周期和翻滚 (rollover) 策略

  • Elasticsearch:Index 生命周期管理入门

  • Elastic: 使用索引生命周期管理实现热温冷架构

负载均衡

处理大量请求的最佳方式是平衡多个节点之间的负载。 大多数生产集群将使用负载平衡在节点之间分配工作负载,并减少单个节点不堪重负的机会。 通过在多个节点之间分配工作负载,负载平衡将毫不费力地提高集群的整体性能。

Elasticsearch 默认提供负载均衡功能,唯一的要求是用户必须手动启用它。 用户可以将节点配置为协调节点以启用智能负载平衡,从而在节点之间分配负载。 根据需求,用户可以配置多个负载均衡器来针对不同数据处理需求的特定节点。 负载均衡不仅适用于数据摄取或处理,它影响集群的各个方面。 确保您有足够数量的节点来处理从摄取节点、数据节点到 Kibana 以及 APM 和 Fleet 节点的负载(具体取决于使用情况)。

在实践中,我们可以通过配置 coordination-only 节点来实现 Elasticsearch 节点的负载均衡。你可以参考文章 “Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica” 以了解更多。

刷新间隔

数据被索引后不会立即可用,这是由于配置的刷新间隔控制内存缓冲区中存在的数据的写入时间。 这相当于刷新一个数据流以获得最新的结果。 如果刷新间隔设置为10秒,它将每10秒更新一次并为你提供最新的数据。

由于每次刷新都会消耗资源,跨多个流的多次连续或并行刷新会给集群带来压力,从而导致性能下降。 因此,用户必须微调刷新间隔。 指标和正常运行时间需要更快的刷新间隔,因为这些取决于最新数据。 同时,根据日志类型,日志可以有更大的间隔,例如,如果你正在监视 Nginx 访问/错误日志,则需要更快的间隔,但对于后台任务执行日志,我们可以有更大的间隔。

作为基本经验法则,需要不断更新的数据可以以较小的间隔保留,而不太重要的数据可以设置为较大的间隔,例如每小时甚至每天刷新。

监控性能指标

我们使用 Elasticsearch 进行监控,但我们不要忘记监控 Elasticsearch 和 ELK。 应持续监控集群的健康状况和节点可用性。 由于 Elasticsearch 性能与可用硬件资源相关,用户应监控集群内所有节点的性能指标,例如 CPU、内存使用情况和磁盘 I/O。 内存使用情况监控还包括 JVM 内存以及垃圾收集统计信息。

除了索引和分片的数量之外,还必须不断监控性能和查询延迟,以识别资源密集型查询和索引,并在必要时执行任何优化。 索引和分片可以完全删除或合并以减少资源开销。 可以优化查询,或者重新配置索引以提高性能,我们甚至可以添加额外的资源以保持集群性能最佳。 这主要适用于自托管集群,应监控网络延迟和性能,以确保集群内所有资源之间的可靠且快速的连接。

主动关注集群性能是消除性能问题的最佳预防措施。更多关于健康 Elastic Stack 的文章:

  • Beats:通过 Metricbeat 实现外部对 Elastic Stack 的监视
  • Elastic:通过 Logstash 或 Kafka 使用 Metricbeat 监控 Elastic Stack
  • Elastic:监控 Elasticsearch 及 Kibana
  • Elastic:监控 Beats 及 APM Server
  • Logstash:使用 Metricbeat 监控 Logstash
  • Observability:集群监控 (一) - Elastic Stack 8.x

  • Observability:集群监控 (二) - Elastic Stack 8.x

结论

确定数据处理需求的优先级、提供足够的硬件资源、根据用户的具体需求优化集群以及持续监控是正确调整 Elasticsearch 集群以发挥最佳性能的基础。 初始优化可能非常耗时且艰巨,但可以获得显着的性能提升,并且对于任何集群来说都是必须做的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/292386.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

50万元+奖金池!英特尔人工智能创新应用大赛正式开赛

毋庸置疑,AI已成为推动全球科技进步的重要动力。AI的快速发展不仅重塑人们对机器智能的认识,也在改变商业、工业和日常生活的方方面面。 作为全球半导体行业的领导者,英特尔以其先进的处理器技术和深度学习框架推动AI的发展,同时…

playbook控制语句

本章主要介绍 playbook中的控制语句。 目录 判断语句when &#xff08;1&#xff09;when判断中>、<、!的使用 &#xff08;2&#xff09;when判断中in的用法 &#xff08;3&#xff09;when判断中is的用法 判断语句block-rescue 循环语句 一个play中可以包含…

如何把透明OLED显示屏介绍给用户人群

透明OLED显示屏是一种新型的显示技术&#xff0c;它具有透明度高、色彩鲜艳、对比度高、响应速度快等优点。下面是一些介绍透明OLED显示屏的要点&#xff1a; 透明度&#xff1a;透明OLED显示屏的最大特点是其透明度&#xff0c;它可以让光线透过显示屏&#xff0c;使得屏幕背后…

源码订货系统的优势

源码订货系统是一种企业购买后可以获得源代码的订货系统&#xff0c;它可以不受软件厂商的规模、发展而修改和使用。与SaaS订货系统相比&#xff0c;核货宝为您分享源码订货系统的四大优势&#xff1a; 一是开放性&#xff1a;源码订货系统是开源的&#xff0c;用户可以掌握源代…

用23种设计模式打造一个cocos creator的游戏框架----(二十三)中介者模式

1、模式标准 模式名称&#xff1a;中介者模式 模式分类&#xff1a;行为型 模式意图&#xff1a;用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。 结构图&#xff…

众和策略股市行情分析:股市里什么叫外资?外资股是什么?

股市里什么叫外资&#xff1f; 外资就是指的国外本钱&#xff0c;即国外出资者参与到我国股市所投入的本钱。通常情况下&#xff0c;外资主要靠直接或直接持有我国股市的股票来达成注入本钱的意图。比较于内资&#xff0c;外资更多的注重于我国商场的整体情况&#xff0c;采用…

算法模板之栈图文详解

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;算法模板、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️模拟栈1.1 &#x1f514;用数组模拟实现栈1.1.1 &#x1f47b;栈的定义1.1.…

华为端口隔离简单使用方法同vlan下控制个别电脑不给互通

必须得用access接口&#xff0c;hybrid口不行 dhcp enable interface Vlanif1 ip address 192.168.1.1 255.255.255.0 dhcp select interface interface MEth0/0/1 interface GigabitEthernet0/0/1 port link-type access port-isolate enable group 1 interface GigabitEther…

研究生课程 |《数值分析》复习

搭配往年真题册食用最佳。

推荐算法架构7:特征工程

1 概述 特征工程[1]&#xff08;Feature Engineering&#xff09;是推荐算法的基础&#xff0c;它对收集到的原始数据进行解析和变换&#xff0c;从而提取出模型所需要的信息。通过挖掘丰富和高质量的特征&#xff0c;并对其进行合理的处理&#xff0c;可以提升模型预估准确度…

MFC静态链接+libtiff静态链接提示LNK2005和LNK4098

编译报错 1>msvcrt.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_infoAAEABV0Z) 已经在 libcmtd.lib(typinfo.obj) 中定义 1>msvcrt.lib(ti_inst.obj) : error LNK2005: "pr…

pytorch-模型预测概率值为负数

在进行ocr识别模型预测的时候&#xff0c;发现预测的结果是正确的&#xff0c;但是概率值是负数&#xff1a; net_out net(img) #torch.Size([70, 1, 41]) logit, preds net_out.max(2) #41是类别 需要对类别取最大值 preds preds.transpose(1, 0).contiguous().view(-1) …