我有以下指标:
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渲染图形。这有什么区别吗?
最佳答案
注意我还没有解决这个问题,但是信息可能会有所帮助。假设 Graphite 中有以下数据
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')
将输出指标
A
,B
,C
和总匹配数。由于未命中的groupByNode将返回相同的度量名称,因此我们应该以某种方式对其进行区分。使用别名Sub 。现在我们有了:aliasSub(groupByNode(folsomite.*.cache.hit*, 1, 'sumSeries'), '(.*)', '\1.hit')
aliasSub(groupByNode(folsomite.*.cache.miss*, 1, 'sumSeries'), '(.*)', '\1.miss')
得到的指标是
A.hit
,B.hit
,C.hit
,A.miss
,B.miss
,C.miss
。接下来,我们可以尝试reduceSeries(这对我不起作用,我缺少了:))。由于减少了要处理的系列的期望列表,因此需要通过group或mapSeries进行组合,因此
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能够设置带有变量的模板,因此可以使用它,但是我必须深入研究此功能。
关于graphite - 对多个指标求和而不对通配符求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34719903/