对多个指标求和而不通过通配符求和?

Posted

技术标签:

【中文标题】对多个指标求和而不通过通配符求和?【英文标题】:Sum multiple metrics without summing over a wildcard? 【发布时间】:2016-04-15 15:58:33 【问题描述】:

我有以下指标:

folsomite.<host>.cache.hit1 folsomite.<host>.cache.hit2 folsomite.<host>.cache.miss1 folsomite.<host>.cache.miss2 folsomite.<host>.cache.miss3

(我正在使用的缓存库有 2 种命中方式:第一次和第二次机会,以及 3 种未命中)

我想计算(hit1 + hit2) / (miss1 + miss2 + miss3)。我以为我会从计算(hit1 + hit2) 开始,但如果我将sumSeries 用作sumSeries(folsomite.*.cache.hit*),那么它也会对<host> 值求和。

如何对某些通配符的多个指标求和,而不对其他通配符求和?或者如何在保留通配符的同时专门添加两个(或更多指标)?

而且,这样做之后,我可以将一个(总和)结果除以另一个吗?

编辑:我实际上是在使用 grafana 来渲染图表。这有什么不同吗?

【问题讨论】:

【参考方案1】:

注意我还没有解决这个问题,但信息可能会有所帮助。假设石墨中有以下数据

folsomite.A.cache.hit1
folsomite.B.cache.hit1
folsomite.A.cache.hit2
folsomite.C.cache.hit1
folsomite.B.cache.hit2
folsomite.A.cache.miss1
folsomite.B.cache.miss1
folsomite.A.cache.miss2
folsomite.A.cache.miss3
folsomite.C.cache.miss2
folsomite.B.cache.miss2

要按一个通配符分组,您应该使用groupByNode 所以

groupByNode(folsomite.*.cache.hit*, 1, 'sumSeries')

将输出指标ABC 以及总命中。由于未命中的 groupByNode 将返回相同的度量名称,我们应该以某种方式区分它。使用 aliasSub。所以现在我们有:

aliasSub(groupByNode(folsomite.*.cache.hit*, 1, 'sumSeries'), '(.*)', '\1.hit')
aliasSub(groupByNode(folsomite.*.cache.miss*, 1, 'sumSeries'), '(.*)', '\1.miss')

我们得到的指标是A.hitB.hitC.hitA.missB.missC.miss

接下来我们可以试试reduceSeries(这对我不起作用,我错过了一些东西:))。由于减少了要处理的系列的期望列表,因此需要通过groupmapSeries组合,所以

group(
  aliasSub(groupByNode(folsomite.*.cache.hit*, 1, 'sumSeries'), '(.*)', '\1.hit'), 
  aliasSub(groupByNode(folsomite.*.cache.miss*, 1, 'sumSeries'), '(.*)', '\1.miss')
)

将输出完全未命中和命中系列。现在减少

 reduceSeries(
   group(
     aliasSub(groupByNode(folsomite.*.cache.hit*, 1, 'sumSeries'), '(.*)', '\1.hit'),
     aliasSub(groupByNode(folsomite.*.cache.miss*, 1, 'sumSeries'), '(.*)', '\1.miss')
   ), 'divideSeries', 1, 'hit', miss')

就是这样。也许以后我会尝试不同的方法,但是……我希望它至少能给你一些提示。

而且由于 grafana 能够使用变量设置模板,因此可以使用它,但我必须深入研究此功能。

【讨论】:

以上是关于对多个指标求和而不通过通配符求和?的主要内容,如果未能解决你的问题,请参考以下文章

sumif和countif的区别

在 R 中,如何根据一列的值对所有其他列求和,而不指定列名?

使用awk迭代unix命令nm并通过多个文件求和输出

对 SQL 表中的 x 到 x+n 列求和

Prolog 通配符:重复列表而不更改通配符值

如何从json获取数据中对两个或多个值求和