汇总服务器间CPU计数不同的多个服务器的CollectD CPU统计信息



我正试图伪造一个图表,显示一组可变服务器中最坏情况下的CPU使用情况。我从collectd获得数据,它分别报告每个CPU核心的统计数据。问题是,集合中的服务器可能具有不同数量的CPU核心。

到目前为止,我所拥有的(每个cpu foo属性一个系列):sumSeriesWithWildcards(sumSeriesWithWildcards(summarize(servers.$foo.$bar.*.collectd.cpu-*.cpu-system.value, '$timeframe', 'max', false), 5), 3)

很明显,这会使图向cpu空闲倾斜,因为服务器在很大程度上负载均匀,因此cpu内核较多的服务器显示出比内核较少的服务器更高的空闲率。

为了澄清这一点:我想在所有服务器上将每个服务器的所有cpu-*系列总和汇总到最大值,但空闲除外,我想将其汇总到最小值。因此,我需要一种方法,在汇总之前将每个服务器的总和标准化为100%。

到目前为止,我已经谈到了这一点,它稍微好一点:divideSeries(sumSeriesWithWildcards(sumSeriesWithWildcards(summarize(servers.$foo.$bar.*.collectd.cpu-*.cpu-system.value, '$timeframe', 'max', false), 5), 3), #L)

然而,这仍然不能令人满意。它没有那么扭曲,但仍然不能实现这张图的目的:显示服务器之间最坏情况下的CPU使用情况。

我需要做但不知道如何做的是:

  1. 对于段3(服务器)中的每个,计算cpu-*,然后
  2. 对该服务器的每个cpu-*.foo求和,然后将其除以1的计数
  3. 从2求和。并总结

我缺少的是第二步。基本上,我需要一种方法来规范化每个服务器的不同CPU值,然后再将它们相加。

有办法做到这一点吗?

编辑:当然,这也适用于其他在服务器上保持一致的指标,例如RAM。

试试这个:

summarize(sumSeries(averageSeriesWithWildcards(servers.$foo.$bar.*.collectd.cpu-*.cpu-system.value, 5)), '$timeframe', 'max', false)

我不确定它会起作用,但我相信它遵循了你概述的步骤,也许你可以调整它以使其起作用。:)请参阅有关Graphite函数的文档。

最新更新