ELK 架构中 ES 性能优化

1. 背景

由于目前日志采集流程中, 经常遇到用户磁盘 IO 占用超过 90% 以上的场景, 但是观察其日志量大约在 2k~5k 之间, 整体数据量不大, 所以针对该问题进行了一系列的压测和实验验证,最后得出这篇优化建议文档

2. 压测前期准备

2.1 制造大量日志

该阶段为数据源输入阶段, 为了避免瓶颈在数据制造侧, 所以需要保证 filebeat 具有足够的日志制造能力
最后效果, filebeat 可以达到 70k QPS 的数据发往logstash . (真实数据可以更高, 70k qps 是因为目前单实例 logstash 的 CPU 计算瓶颈, logstash 配置的 output 为空的情况下)

2.2 logstash 侧降低副本, 调整资源限制

Logstash 主要是 cpu 密集型服务, 数据传输到 es 的时候为了观察方便, 设置 logstash 副本数为 1, 并将 cpu 的 limit 开放到 12 core. 同时为了避免影响到 es, 将 该单实例 logstash 部署到 master 节点
验证性能方案
不断调节 logstash 配置, 找出性能消耗较大的配置项

2.3 es 侧配置等保持不变

根据之前的推断, 磁盘 io 主要由于 es index 写入进行的消耗, 所以 es 是本次调节的重点, 暂时保持配置不变, 在验证过程中不断调节 es 配置

2.4 其他调整

  1. 其他无关服务关闭, 卸载 mongo, Redis . 等无关服务

3. 压测步骤

  1. 关闭 logstash 到 es 的输出, 通过 logstash 的 metrics 观察不同配置对 logstash 处理能力的影响
  2. Logstash 配置不变情况下, 调节 es index 生命周期策略等配置, 通过 es 的 metrics 观察不同配置对 doc 数量和 磁盘 io 的影响

4. 优化建议

4.1 logstash 优化

4.1.1 删除 logstsh 大量字段删除操作, 移动到 filebeat 侧进行

mutate remove_field 处理消耗大量 cpu, 可以将部分操作移动到 filebeat 中

4.1.2 优化 logstash 配置参数, 提升每批次处理量 (优先)
pipeline.batch.size: 500
pipeline.batch.delay: 200

空间换时间, 内存会有小幅上升, 但是会提升 cpu 处理效率

4.1.3 优化 if else 处理逻辑(暂缓)

由于 logstash 没有 switch 等语句, 只能嵌套多个 if else. 所以可以将中日志频率高的 event code 放在前面

4.1.4 使用 logstash pipeline, 避免多个数据源的相互影响(暂缓)

Logstash 提供了 logstash pipeline 机制, 避免 filter 之间的相互影响
参考: Creating a Logstash pipeline | Logstash Reference [8.15] | Elastic

4.2 es 优化

4.2.1 index segment分段设置 等参数优化 (优先)

索引模版增加 合并相关参数

{"index": {"codec": "best_compression", "mapping": {"total_fields": {"limit": "10000"}},"refresh_interval": "30s","translog": {"flush_threshold_size": "512mb","sync_interval": "10s","durability": "async"},"merge": {"scheduler": {"max_thread_count": "1"},"policy": {"floor_segment": "2mb","max_merge_at_once": "5","max_merged_segment": "5gb"}}}
}

将各个索引模版增加以上参数, 各参数解释

  • “codec”: “best_compression”, // 使用最佳压缩方式, 节省磁盘和 io 性能, 会稍微影响读取性能, 但是目前场景为写多读少
  • “refresh_interval”: “30s”, // 增加刷新间隔, 避免频繁刷新, 占用磁盘 io, 数据最大 30s 后可被检索
  • “translog.flush_threshold_size”: “128mb”, // 设置事务日志(translog)达到多大时进行刷新(flush)
  • “translog.sync_interval”: “10s”,// 定事务日志同步到磁盘的频率, 10s 内的数据可能在宕机时候丢失
  • “translog.durability”: “async”, // async 表示异步持久化,事务日志不会立即同步到磁盘,而是根据 translog.sync_interval 的设置进行同步
  • “merge.scheduler.max_thread_count”: 1, // 较高的线程数可以加快合并速度,但也会增加磁盘 IO。设置为 1 表示只使用一个线程进行合并
  • “merge.policy.floor_segment”: “2mb”, // 小于此大小的段将被优先合并,以减少段的数量并提高查询性能。
  • “merge.policy.max_merge_at_once”: “5”, // 较高的值可以减少段的数量,但也会增加合并操作的 I/O 负载
  • “merge.policy.max_merged_segment”: “5gb” // 较大的段可以减少段的数量,但也会增加单个段的大小,可能影响查询性能。
4.2.2 生命周期策略关闭强制合并 (优先)

关闭强制合并, 避免在 index 读写较高时, 进行合并操作, 可以在空闲时段离线进行合并操作

4.2.3 增加温阶段, 在温阶段中, 合并 segement 和降低副本数(暂缓)

将临近删除的数据, 增加温阶段, 合并 segement 和降低副本数, 以此达到降低磁盘使用量的目的

5. 最终效果

硬盘: 机械硬盘, vmware 虚拟盘
Logstash 配置: 单实例 12 核 8g
ES data 配置: 双实例 12 核 8g
极限情况下(磁盘 io 成为瓶颈的情况下)
峰值: 12k qps
平均值: 9k qps

收益
优化前 峰值 5k qps
优化后 峰值 12k qps

6. 关于这次优化的问题解答

  1. 为什么之前 io 负载高
    1. 频繁的 merge 造成, io 进程多, 同时还有强制合并
  2. 为什么 logstash 内存高
    1. jvm 直接占用内存, 不是实际使用的内存
    2. 实际要看 jvm 内的指标量
  3. 什么是 segement, 为什么要合并, 什么时候合并
    1.  Elasticsearch 中,段是一个倒排索引的基本单元
    2. es 会自动和手动合并 segement
    3. segement 不变, 只能被合并, 合并可以通过参数调节
      4.- 数据首先写入内存缓冲区,然后定期刷新到新的段中
    4. 分配和段的管理是由底层的 Lucene 库自动处理的
  4. ingest 是什么, pipeline 是做什么的
    1. 用于在数据被索引之前对其进行预处理, 与处理数据用的
    2. pipeline 是一系列处理器(processors)的集合

7. 最佳实践

  • 尽量批量发送数据到 Elasticsearch。
  • 数据预处理尽可能在数据产生侧完成。
  • 每个 Elasticsearch shard 的建议大小为 50GB。
  • 不重要的数据可不保留副本。
  • Elasticsearch 的 segment 合并会严重占用磁盘 IO,对于不需要实时处理的数据,可以减缓合并频率。
  • Logstash 是 CPU 密集型应用,一般不需要大量内存。
  • Filebeat 功能强大,可以处理一些数据缓存等任务。

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

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

相关文章

JavaScript 将 json 美化输出

https://andi.cn/page/621741.html

STM32G474RE之RTC

STM32G474RE之RTC使用HAL库实现RTC时间配置,以及报警配置,支持双路报警。 1、STM32G474RE的RTC晶振引脚: OSC32_IN为PC14,OSC32_OUT为PC15; 2、Vbat引脚 Vbat引脚是用来给外部晶振LSE和备份寄存器提供电源。当没有“…

Android平台RTMP|RTSP播放器如何回调YUV或RGB数据?

技术选型 我们知道,Android平台一般RTMP|RTSP播放器通常不直接提供回调YUV或RGB数据的功能。如果播放端有视觉分析或类似的需求,需要播放端,能支持YUV或ARG的数据回调,一般来说,可参考的方法如下: 1. 使用…

Xcode 16 RC (16A242) 发布下载,正式版下周公布

Xcode 16 RC (16A242) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接:https://sysin.org/blog/apple-xcode-16/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Xcode 16 的新功…

3D Gaussian Splatting 论文学习

概述 目前比较常见的渲染方法大致可以分为2种: 将场景中的物体投影到渲染平面:传统的渲染管线就是这种方式,主要针对Mesh数据,可以将顶点直接投影成2D的形式,配合光栅化、深度测试、Alpha混合等就可以得到渲染的图像…

如何使用 ONNX 结合 GPU 加速推理(CUDA 与 cuDNN 简明指南)

前言 在深度学习模型推理中,使用 GPU 进行加速是提升模型推理速度的关键方式之一。 本文将带大家一步步了解如何使用 ONNX Runtime 结合 NVIDIA 的 CUDA 和 cuDNN 进行 GPU 加速。 一、查找ONNX、CUDA与cuDNN之间的对应版本 首先,我们需要确保 ONNX Runtime 与 CUDA 和 cu…

量化投资策略_因子打分选股的案例实现

一:因子打分选股的介绍 因子打分选股是一种量化投资策略,它通过选取多个与股票收益率相关的因子,对股票进行综合评分,然后根据评分来选择股票构建投资组合。以下是构建多因子打分选股模型的一般步骤: 数据预处理&…

Redis——常用数据类型hash

目录 hash常用命令hsethgethdelhkeyshvalshgetallhmgethlenhsetnxhincrbyhdecrby 哈希的编码方式哈希的应用 hash 常用命令 hset HSET key field value [field value ...]//时间复杂度O(1) //返回值:设置成功的键值对的个数hget HGET key field//hdel HDEL key…

【SSRF漏洞】——http协议常见绕过

改变的确很难,但结果值得冒险 本文如有错误之处,还请各位师傅指正 一.ssrf概述 SSRF全称为Server-side Request Fogery,中文含义服务器端请求伪造 SSRF是一种由攻击者构造形成由目标服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标…

Linux 防火墙:iptables (二)

文章目录 SNAT 原理与应用SNAT 应用环境SNAT 原理SNAT 转换前提条件SNAT 格式SNAT 转换规则配置 DNAT 原理与应用DNAT 应用环境DNAT 原理DNAT 转换前提条件DNAT 格式DNAT 转换规则配置 iptables 规则的备份和还原导出(备份)所有表的规则导入(…

PCL 点云基于曲率大小渲染颜色

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2处理后点云 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新) 一、概…

Django笔记一:搭建Django环境与URL路径访问

博主之前学从Java后端开发,后面获取到读研资格,想着未来转算法岗,初学Python,发现Python还挺有趣的,由于之前所学后端缘故,有点后端情节,想学习一下Django框架(python的web框架&…

人工智能和机器学习:探讨人工智能和机器学习的最新发展、应用、挑战和未来趋势

人工智能和机器学习是当前科技领域的热点话题,其最新发展、应用、挑战和未来趋势备受关注。 最新发展: 人工智能和机器学习技术在近年来得到了快速发展,尤其是深度学习技术的广泛应用。例如,深度学习在图像识别、语音识别、自然语…

react 基础语法

前置知识 类的回顾 通过class关键字定义一个类 类名首字母大写 class类有constructor构造器 new 一个类得到一个实例 类还有方法,该方法也会在其原型上 static静态数据,访问静态属性通过 类名.id getter和setter getter:定义一个属性&…

网络学习-eNSP配置VRRP

虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP) VRRP广泛应用在边缘网络中,是一种路由冗余协议,它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱,允许主机使用单路由器,以及即使在实际…

全球NAND原厂闪存市场格局变化

根据市场研究机构TrendForce的最新跟踪报告,三星(Samsung)和SK海力士(SK hynix-Solidigm)在过去的一个季度中扩大了他们在NAND闪存市场的份额,这主要得益于抢占了铠侠(Kioxia)与西部…

小目标检测顶会新思路!最新成果刷爆遥感SOTA,参数小了18倍

遥感领域的小目标检测一直是个具有挑战性和趣味性的研究方向,同时也是顶会顶刊的常客。但不得不说,今年关于遥感小目标检测的研究热情尤其高涨,已经出现了很多非常优秀的成果。 比如SuperYOLO方法,通过融合多模态数据并执行高分辨…

【重学 MySQL】二十八、SQL99语法新特性之自然连接和 using 连接

【重学 MySQL】二十八、SQL99语法新特性之自然连接和 using 连接 自然连接(NATURAL JOIN)USING连接总结 SQL99语法在SQL92的基础上引入了一些新特性,其中自然连接(NATURAL JOIN)和USING连接是较为显著的两个特性。 自…

数据结构(14)——哈希表(1)

欢迎来到博主的专栏:数据结构 博主ID:代码小豪 文章目录 哈希表的思想映射方法(哈希函数)除留余数法 哈希表insert闭散列负载因子扩容find和erase 哈希表的思想 在以往的线性表中,查找速度取决于线性表是否有序&#…

知识库管理系统在企业数字化转型中的作用

引言 在数字化转型的浪潮中,企业正以前所未有的速度重塑其业务模式、运营流程和组织架构,以适应快速变化的市场环境和客户需求。这一过程中,知识库管理系统作为信息整合与知识共享的核心平台,发挥着举足轻重的作用,不…