--- title: "INFINI Console 指标采集优化" date: 2024-12-16 lastmod: 2024-12-16 description: "为优化Easysearch/Elasticsearch/Opensearch集群指标采集,新架构将各集群任务分配至独立线程,支持独立时间间隔设置与资源集中控制,大幅提升稳定性、完整性和性能,增强用户体验。" tags: ["Console", "Metrics"] summary: "前言 # 在 Easysearch / Elasticsearch / Opensearch 管理系统中,对于不同集群不同指标数据进行采集是一个常规任务。但是采集过程中不仅会对采集系统 CPU 和访问性能造成不少压力,也会对 Easysearch / Elasticsearch / Opensearch 集群造成资源消耗,从而影响集群本身的健康运行。因此,优化设计采集指标任务系统设计尤为重要。 原架构分析 # 先前基于对 Console 自身性能影响的考量,我们将所有纳管集群的指标采集任务都放到单一线程中去顺序执行,如下图: 在原有架构中,所有集群指标的采集任务操作均依赖于一个线程执行,每个集群的采集任务包括 “集群健康”,“集群统计”, “节点统计” 等采集任务。该模型实现简单,但也带来以下问题: 单线程实现增加应用总时间而导致超时风险。 不同集群间采集指标任务相互干扰,导致指标采集相当不稳定。 不同的集群指标采集时间间隔可能不一样,无法精确控制。 新架构优化 # 新设计中,我们将每个集群中不同采集项分布到独立线程去执行: 每个集群的“集群健康”,“节点统计”,和“指数统计”采用独线程执行。 不同的指标采集任务可以独立设置采集时间间隔。 将所有采集任务放到一个线程池中去执行,集中控制资源使用和任务调度。 优化效果 # 通过拆分并发执行,新设计获得了如下收益: 解决了相互干扰并导致性能不稳定的问题 提升输出和数据分析完整性。 解决了不同指标采集任务设置不同采集间隔的问题 总结 # 通过拆分并发采集集群指标,使得 INFINI Console 的指标采集功能更加流畅,指标输出更加完整,给用户带来更好的使用体验。最近 INFINI Console 宣布开源了,如果您想了解更多的细节, 可以去 https://github.com/infinilabs/console 查看源码。" --- ## 前言 在 Easysearch / Elasticsearch / Opensearch 管理系统中,对于不同集群不同指标数据进行采集是一个常规任务。但是采集过程中不仅会对采集系统 CPU 和访问性能造成不少压力,也会对 Easysearch / Elasticsearch / Opensearch 集群造成资源消耗,从而影响集群本身的健康运行。因此,优化设计采集指标任务系统设计尤为重要。 ## 原架构分析 先前基于对 [Console](https://docs.infinilabs.com/console/main/zh//) 自身性能影响的考量,我们将所有纳管集群的指标采集任务都放到单一线程中去顺序执行,如下图: ![](/img/blog/2024/optimize-metrics-collecting/d1.png) 在原有架构中,所有集群指标的采集任务操作均依赖于一个线程执行,每个集群的采集任务包括 “集群健康”,“集群统计”, “节点统计” 等采集任务。该模型实现简单,但也带来以下问题: 1. 单线程实现增加应用总时间而导致超时风险。 2. 不同集群间采集指标任务相互干扰,导致指标采集相当不稳定。 3. 不同的集群指标采集时间间隔可能不一样,无法精确控制。 ## 新架构优化 新设计中,我们将每个集群中不同采集项分布到独立线程去执行: 1. 每个集群的“集群健康”,“节点统计”,和“指数统计”采用独线程执行。 2. 不同的指标采集任务可以独立设置采集时间间隔。 3. 将所有采集任务放到一个线程池中去执行,集中控制资源使用和任务调度。 ![](/img/blog/2024/optimize-metrics-collecting/d2.png) ## 优化效果 通过拆分并发执行,新设计获得了如下收益: 1. 解决了相互干扰并导致性能不稳定的问题 2. 提升输出和数据分析完整性。 3. 解决了不同指标采集任务设置不同采集间隔的问题 ## 总结 通过拆分并发采集集群指标,使得 INFINI Console 的指标采集功能更加流畅,指标输出更加完整,给用户带来更好的使用体验。最近 INFINI Console 宣布开源了,如果您想了解更多的细节, 可以去 [https://github.com/infinilabs/console](https://github.com/infinilabs/console) 查看源码。