我有以下指标:
{{line-item item=lineItem}}
folsomite.<host>.cache.hit1
folsomite.<host>.cache.hit2
folsomite.<host>.cache.miss1
folsomite.<host>.cache.miss2
(我使用的缓存库有2种风格:第一次机会和第二次机会,以及3种风格的错过)
我想计算folsomite.<host>.cache.miss3
。我想我是从计算(hit1 + hit2) / (miss1 + miss2 + miss3)
开始的,但如果我使用(hit1 + hit2)
作为sumSeries
,那么它也会对sumSeries(folsomite.*.cache.hit*)
值进行求和。
如何在不通过其他通配符求和的情况下,对一些通配符中的多个指标求和?或者,如何在保留通配符的同时专门添加两个(或更多指标)?
并且,在完成此操作后,我可以将一个(求和)结果除以另一个吗?
编辑:我实际上是使用grafana来渲染图形。这有什么不同吗?
答案 0 :(得分:12)
注意我没有解决这个问题,但信息可能会有所帮助。我们假设石墨中有以下数据
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
。由于miss的groupByNode将返回相同的度量名称,我们应该以某种方式区分它。使用 aliasSub 。所以现在我们有:
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')
)
将完全输出miss和hit系列。现在减少
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能够使用变量设置模板,因此可以使用它,但我必须深入研究这个功能。