前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kibana Alerting: 突破扩展性限制,实现50倍规模提升

Kibana Alerting: 突破扩展性限制,实现50倍规模提升

原创
作者头像
点火三周
发布于 2025-04-23 07:53:05
发布于 2025-04-23 07:53:05
970
举报
文章被收录于专栏:Elastic Stack专栏Elastic Stack专栏

在过去的几年里,Kibana告警一直是许多大型组织的首选监控解决方案。随着使用的不断增加,用户创建的告警规则数量也在增长。越来越多的组织依赖Kibana进行大规模告警,我们看到了提高效率和确保未来工作负载性能的机会。

在Kibana 8.16到8.18之间,我们正面解决了这些问题,引入了关键的改进,突破了之前的扩展性限制。在这些改进之前,Kibana告警每分钟最多支持3,200个规则,而且至少需要16个Kibana节点,才能避免严重的性能瓶颈。到了Kibana 8.18,我们将每分钟规则的扩展能力提高了50倍,支持每分钟最多160,000个轻量级告警规则。这是通过让Kibana有效扩展超过16个节点,并将每个节点的处理能力从每分钟200个规则提升到最多3,500个规则来实现的。这些增强使所有告警规则运行得更快,延迟更少,效率更高。

本文将探讨我们克服的扩展挑战、实现这一目标的关键创新,以及如何利用这些改进高效地运行大规模的Kibana告警。

Kibana告警如何与任务管理器一起扩展

Kibana告警允许用户定义基于实时数据触发告警的规则。在幕后,Kibana任务管理器负责调度和运行这些规则。

任务管理器是Kibana内置的作业调度程序,旨在将异步后台任务与用户交互分开处理。它的主要职责包括:

  • 运行一次性和周期性任务,例如告警规则、连接器操作和报告。
  • 动态分配工作负载,当Kibana后台节点加入或离开集群时。
  • 保持Kibana UI响应,通过将任务卸载到专用的后台进程。

每个告警规则都会转化为一个周期性后台任务。每个后台任务都是一个Elasticsearch文档,意味着它会被存储、获取和更新。随着告警规则数量的增加,Kibana需要管理的后台任务也在增加。然而,每个Kibana节点能够同时处理的任务数量是有限的。一旦达到容量,额外的任务就需要等待,导致延迟和任务运行时间变慢。

问题:为什么扩展受限

在这些改进之前,任务管理器面临一些扩展性限制,无法超过每分钟3,200个任务和16个Kibana节点。在这个规模上,我们观察到由于争用和资源低效,进一步扩展时收益递减。这些数字基于内部性能测试,使用一个基本的Elasticsearch查询告警规则进行无操作查询。观察到的收益递减包括:

任务争夺

任务管理器使用分布式轮询方式在Elasticsearch索引内认领任务。Kibana节点周期性查询任务并尝试使用Elasticsearch的乐观并发控制来认领任务,防止冲突的文档更新。如果另一个节点先更新了任务,原节点就会放弃它,降低整体效率。

当有太多Kibana节点争夺任务时,文档更新冲突急剧增加,效率受限于16个节点,系统吞吐量降低。

Kibana任务争夺
Kibana任务争夺

节点处理能力低效

每个Kibana节点都有一个默认的并发任务限制(默认:同时10个任务),以防止内存和CPU过载。这一保护措施常常导致CPU和内存未被充分利用,需要比必要的更多节点。

另外,轮询间隔(默认:3000ms)定义了任务管理器认领新任务的频率。较短的间隔减少任务延迟,但增加节点间的争夺。

Kibana告警节点处理能力低效
Kibana告警节点处理能力低效

资源低效

在运行大量告警规则时,Kibana节点执行重复的Elasticsearch查询,重复加载相同的对象和列表,消耗了比必要更多的CPU、内存和Elasticsearch资源。扩展需要昂贵的基础设施扩张以支持不断增加的请求负载。

为什么重要

打破这些限制对于Kibana的持续发展至关重要。提高扩展性可以实现:

  • 成本优化:降低大规模运营的基础设施成本。
  • 更快的恢复:提升Kibana从节点或集群故障中恢复的能力。
  • 未来扩展:为额外的工作负载(如定时报告和事件驱动自动化)提供扩展能力。

Kibana任务管理器的关键创新

为了实现50倍的扩展提升,我们引入了几个创新:

Kibana发现服务:更智能的扩展

之前,Kibana节点彼此之间没有意识,导致任务分配效率低下。新的Kibana发现服务动态监控活跃节点并相应地分配任务分区,确保负载均匀分布,减少争夺。

任务分区:消除争夺

为了防止节点争夺相同的任务,我们引入了任务分区。任务现在分布在256个分区内,确保在任何给定时间只有一部分Kibana后台节点尝试认领相同的任务。默认情况下,每个分区分配给最多两个Kibana节点,而单个Kibana节点可以负责多个分区。

Kibana任务管理器:任务分区
Kibana任务管理器:任务分区

任务计费:更智能的资源分配

并不是所有后台任务都消耗相同的资源。我们实施了一个任务计费系统,根据CPU和内存使用情况分配任务权重。这使得任务管理器能够动态调整认领的任务数量,优化资源分配,确保高效性能。

新的任务认领算法

旧算法依赖于通过查询更新强制索引刷新来识别已认领的任务。这种方式效率低下,并且对Elasticsearch造成了不必要的负担。新算法避免了这一点,通过搜索任务而不需要立即刷新。相反,它在任务管理器索引上执行以下操作:一个_search来寻找候选任务,接着一个_mget,返回可能最近更新但尚未反映在刷新索引状态中的文档。通过比较_search_mget结果中的文档版本,它在继续批量更新之前丢弃不匹配项。这种方法提高了Elasticsearch的效率,并提供了更细致的控制以支持任务计费。

通过考虑轮询间隔、任务并发和索引刷新率,我们可以计算预期冲突的上限,并相应调整_search页大小。这有助于确保检索到足够多的任务,以防_mget因文档版本不匹配而丢弃所有搜索结果。

Kibana任务管理器:新的任务认领算法
Kibana任务管理器:新的任务认领算法

更频繁的任务轮询

通过确保固定数量的节点争夺相同的任务、任务分区和新的轻量级任务认领算法,任务管理器现在可以更频繁地轮询任务,而不会对Elasticsearch造成额外压力。这减少了任务完成与下一个任务开始之间的延迟,提升了整体系统吞吐量。

Kibana告警的性能优化

在使用Elastic APM进行优化之前,我们分析了告警规则性能,发现告警框架需要至少20个Elasticsearch查询才能运行任何告警规则。经过优化,我们将这一数字减少到仅3个查询,减少了85%,显著提高了运行时间并降低了CPU开销。

此外,Elasticsearch之前依赖资源密集型的pbkdf2哈希算法进行API密钥认证,这在规模上引入了过多的开销。我们通过切换到更高效的SHA-256算法优化了认证,允许我们消除内部Elasticsearch缓存,该缓存严重受限于同时使用的API密钥数量。

影响:用户受益

早期采用者展示了:

  • 规则运行时间缩短50%,降低了整体系统负载。
  • 任务容量增加,使更多任务可以在现有基础设施上运行。
  • 减少资源配置不足的集群,减少了为满足需求而扩展基础设施的必要性。

由于节点处理能力增加和集群适当配置,平均任务延迟下降

Kibana任务管理器:平均任务延迟
Kibana任务管理器:平均任务延迟

由于告警框架优化,规则运行时长下降

Kibana任务管理器:规则运行时长下降
Kibana任务管理器:规则运行时长下降

由于告警框架优化,Elasticsearch请求减少

Kibana任务管理器:Elasticsearch请求减少
Kibana任务管理器:Elasticsearch请求减少

如何开始:高效扩展

升级到Kibana 8.18后,大多数这些优势会自动解锁。为了进一步优化,可以考虑调整 xpack.task_manager.capacity 设置,以最大化每节点吞吐量,同时确保p999资源使用保持在内存、CPU和事件循环利用率的80%以下,并且事件循环延迟保持在500ms以下。

默认情况下,Kibana每分钟有32,000个告警规则的限制。如果您计划超过此限制,可以相应修改 xpack.alerting.rules.maxScheduledPerMinute 设置。

新的 xpack.task_manager.capacity 设置使Kibana更有效地处理工作负载分配,使得以下设置在大多数情况下不再必要,应该从您的kibana.yml设置中移除:

  • xpack.task_manager.max_workers
  • xpack.task_manager.poll_interval

如果您在本地运行Kibana并希望将后台任务隔离到专用节点,可以使用 node.roles 设置 将处理UI的节点与处理后台任务的节点分开。如果您在Elastic Cloud Hosted (ECH)上使用Kibana,扩展到8GB或更高将自动启用这种隔离。

接下来是什么?

我们不会止步于50倍。我们的路线图目标是实现100倍以上的扩展,进一步消除Elasticsearch的瓶颈。

除了扩展,我们还专注于提高大规模系统监控。即将推出的集成将为系统管理员提供更深入的后台任务性能洞察,使得何时以及如何扩展的决策变得更简单。

此外,通过任务计费,我们计划在配置了更多CPU和内存(例如,具有2GB、4GB或8GB+内存的Kibana集群)时,增加Elastic Cloud Hosted (ECH)客户的任务并发性。

请继续关注更多进展,因为我们将继续推动Kibana扩展性的极限!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kubernetes Helm3 部署 ElasticSearch & Kibana 7 集群
ElasticSearch 安装有最低安装要求,如果执行 Helm 安装命令后 Pod 无法正常启动,请检查是否符合最低要求的配置。
高楼Zee
2020/11/30
4.6K2
Kubernetes Helm3 部署 ElasticSearch & Kibana 7 集群
Elasticsearch架构设计原则与反模式:为扩展性而设计
随着现代企业的不断发展,数据量呈现爆炸式增长,系统扩展性成为一个至关重要的课题。Elasticsearch 作为一个强大的分布式搜索和分析引擎,在应对大规模数据处理方面展现了其卓越的能力。然而,设计一个高效且可扩展的 Elasticsearch 集群并非易事,本文旨在通过分享一些扩展性设计原则和常见的反模式,帮助用户更好地构建和优化他们的 Elasticsearch 集群。
点火三周
2024/07/01
5220
Elasticsearch架构设计原则与反模式:为扩展性而设计
从开发到生产上线,如何确定集群大小?
在 Flink 社区中,最常被问到的问题之一是:在从开发到生产上线的过程中如何确定集群的大小。这个问题的标准答案显然是“视情况而定”,但这并非一个有用的答案。本文概述了一系列的相关问题,通过回答这些问题,或许你能得出一些数字作为指导和参考。
Fayson
2020/02/10
1.2K0
从开发到生产上线,如何确定集群大小?
ES8.8集群与Kibana部署
es可以使用二进制、docker、k8s、rpm方式部署,此处以rpm方式为例。相较于二进制部署,省去了繁琐的用户创建、证书生成、密码设置、启动脚本配置等操作,简化部署流程,可以将更多的精力用于es的使用而不是部署上面。如果资源有限,想体验elk相关功能,可参考文档:https://www.cuiliangblog.cn/detail/section/117075458,后续也会发布docker模式下elk自定义日志采集文章。
章工运维
2024/03/13
1K0
ES8.8集群与Kibana部署
【Elasticsearch专栏 18】深入探索:Elasticsearch核心配置与性能调优 & 保姆级教程 & 企业级实战
Elasticsearch是一个基于Lucene的搜索和分析引擎,能够处理大规模的数据并提供实时的搜索和分析功能。为了充分发挥Elasticsearch的性能,集群搭建时的Linux系统设置优化至关重要。本文将分模块详细介绍如何优化Linux设置,以确保Elasticsearch集群的高效运行。
夏之以寒
2024/03/04
1.4K0
基于Lua+Kafka+Heka的Nginx Log实时监控系统
摘自:空谷幽兰 ( http://mlongbo.com/ ) , CSDN 背景 在我们的系统架构中,Nginx作为所有HTTP请求的入口,是非常重要的一层。每天产生大量的Nginx Access Log,闲置在硬盘上实在是太浪费资源了。所以,能不能把Nginx日志利用起来,实时监控每个业务的访问趋势、用户行为、请求质量和后端异常呢,这就是本文要探讨的主题。 目的 1. 错误码告警(499、500、502和504); 2. upstream_response_time超时告警; 3. request_
大数据文摘
2018/05/21
1.5K0
在CentOS 8上使用Elastic Stack: Elasticsearch/Kibana 7.8的部署与认证配置
本篇对在CentOS 8上使用Elastic Stack套件中的Elasticsearch、Kibana进行简要总结,对Elasticsearch 7.8.0的部署、认证设置与Kibana 7.8.0的配套部署进行了详细总结。未来对在CentOS 8上使用Elastic Stack相关套件,将陆续更新其使用总结、性能调优等方面的系列文章,敬请期待。
ZNing
2020/07/19
1.5K0
在CentOS 8上使用Elastic Stack: Elasticsearch/Kibana 7.8的部署与认证配置
记一次Elasticsearch优化总结
项目中的服务集成了springboot-admin做服务监控,最近一直收到邮件告警,提示es出错。错误信息如下:
kinnylee
2020/10/15
3.4K1
记一次Elasticsearch优化总结
10倍性价比提升!基于腾讯云ES Serverless服务完成审计日志溯源
企业运营过程中,我们经常遇到因突发事件或需求变动需要快速构建未预定资源的情况。在这些情况下,由于缺乏充分准备和可供判断的信息,构建所需资源通常会花费大量时间。而在无法准确预测的情境下,误差可能导致资源不足或大幅度浪费。
点火三周
2024/06/03
3470
10倍性价比提升!基于腾讯云ES Serverless服务完成审计日志溯源
腾讯云服务器配置及部署ES8.2.3 + Kibana8.2.3
本文介绍,在云服务器上安装Elaticsearch8 + Kibana8,并进行外网访问配置的全过程。主要介绍:
变成下水道守护小鸭子
2022/08/22
2.7K0
Kibana常见问题分析与排查
例如:集群出现熔断,集群压力过大,导致采集器无法采集到集群的指标数据并写入elasticsearch。Kibana堆栈监控在请求elasticsearch集群的监控索引时,也无法请求到数据,只接收到elasticsearch集群返回的熔断信息。
空洞的盒子
2023/11/03
3K4
Elasticsearch高级调优方法论之——根治慢查询!
Elasticsearch是非常灵活且功能丰富的搜索引擎,它提供了许多不同查询数据的方法。在实战业务场景中,经常会出现远远低于预期查询速度的慢查询。作为分布式系统的Elasticsearch,可能有各种影响查询性能的因素,包括外部因素,如负载均衡设置,网络延迟(带宽,NIC卡/驱动程序)等。
猿天地
2019/10/09
5.3K0
Elasticsearch高级调优方法论之——根治慢查询!
Python中的分布式系统设计与开发
随着互联网的快速发展,应用程序处理的数据量和并发请求数急剧增加,单机系统往往无法满足这些需求。分布式系统通过将任务分配给多台机器共同完成,提供了更高的性能、可扩展性和容错性。Python作为一种高效、易读且功能强大的编程语言,广泛应用于分布式系统的设计与开发中。
一键难忘
2024/08/16
3510
深入理解高可扩展性得实现
在云计算体系架构中,高可扩展性(High Scalability)本质上是一种弹性工程能力,表现为系统通过智能化的资源编排机制,实现计算、存储、网络等基础资源与业务负载的动态匹配。其核心诉求始终如一:通过纵向扩容(Scale Up)或横向拓容(Scale Out)的灵活组合,构建具备非线性增长能力的数字基础设施,既能在流量脉冲场景下实现毫秒级资源弹性供给,又能在业务低峰期自动回收冗余资源,最终达成服务稳定性与成本效率的黄金平衡。
Michel_Rolle
2024/12/26
1.6K0
Elasticsearch监控之Stack Monitoring
Stack Monitoring(堆栈监控)功能是用于监控 Elasticsearch 集群及其相关组件(如 Kibana、Logstash 和 Beats)性能和健康状态的工具。它提供详细的实时和历史数据视图,可以帮助用户了解集群的负载情况、节点性能、索引状态和资源使用情况,从而迅速发现并解决潜在问题。
空洞的盒子
2024/11/13
1.1K2
软件系统可扩展性的10个关键因素
作为可靠软件设计原则的一部分,这篇文章将重点关注可扩展性——这是构建健壮、面向未来的应用程序的最关键元素之一。
用户5166556
2023/09/07
1.7K0
软件系统可扩展性的10个关键因素
什么是可扩展性-如何设计一个扩展性强的系统 一
在系统设计中,可扩展性是指系统使其性能和成本适应应用程序和系统处理需求的新变化的能力。
用户1418987
2024/09/06
4330
什么是可扩展性-如何设计一个扩展性强的系统 一
400+节点的Elasticsearch集群运维
Meltwater每天要处理数百万量级的帖子数据,因此需要一种能处理该量级数据的存储和检索技术。
杨振涛
2019/04/19
7170
400+节点的Elasticsearch集群运维
400+节点的 Elasticsearch 集群运维
本文首发于InfoQ https://www.infoq.cn/article/1sm0Mq5LyY_021HGuXer
杨振涛
2019/03/11
6010
400+节点的 Elasticsearch 集群运维
从400+节点ElasticSearch集群的运维中,我们总结了这些经验
墨墨导读:国外一家舆情监控公司Meltwater每天处理的数据非常庞大——在高峰期需要索引大约300多万社论文章,和近1亿条社交帖子数据。其中社论数据长期保存以供检索(可回溯到2009年),社交帖子数据保存近15个月的。当前的主分片数据使用了大约200 TB的磁盘空间,副本数据大约600 TB。
数据和云
2019/08/02
1.2K0
从400+节点ElasticSearch集群的运维中,我们总结了这些经验
推荐阅读
相关推荐
Kubernetes Helm3 部署 ElasticSearch & Kibana 7 集群
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档