Dropwizard指标 - 如何在报告间隔后重置计数器

11

我正在使用codahale metrics(现在是dropwizard metrics)监控系统中发生的一些“事件”。我正在使用计数器指标来跟踪“事件”发生的次数。

我检查了报告程序为我的计数器指标打印的值,似乎该值不断增加(而且从不下降)。这似乎是合理的,因为每当我的“事件”发生时,我总是使用metrics.inc()函数。

我真正想要的是在两个报告时间之间获取发生的“事件”计数,为此我需要在每次报告度量时重置我的计数器,但我无法在计数器指标中找到任何选项来执行该操作。Codahale用户是否有一种方法或通用做法来生成这样的度量标准?

当前行为(报告时间10秒):

00:00:00 0
00:00:10 2 // event happened twice
00:00:20 2 // event did not occur
00:00:30 5 // event occured three times`

预期指标:

00:00:00 0
00:00:10 2
00:00:20 0
00:00:30 3
2个回答

1
总结或计算任意间隔内的总数(count(total)):
hitcount(perSecond(your.count), '1day')

据我所知,它会在内部执行所有黑魔法。包括但不限于summarize(scaleToSeconds(nonNegativeDerivative(your.count),1), '1day'),还应根据落入所选聚合间隔的碳保留期(一个或多个)进行缩放。

1
你能解释一下这个语法是什么吗?你使用的是伪代码吗?我应该如何将你的答案实际地融入到我的代码中呢? - Scott G
1
@scottg489 这个语法是用于Graphite查询函数的,例如hitcount: https://graphite.readthedocs.io/en/stable/functions.html#graphite.render.functions.hitcount。因此,它需要收集/报告指标到底层的Graphite服务,然后您可以通过这种方式进行查询。 - Sasha
1
@scottg489 但是现在我建议使用Prometheus作为度量服务器,而不是Graphite。 - Sasha

0

我认为counter不是你的情况下正确的度量标准。考虑使用meter,它会为你提供每个时间间隔的速率:

while(...) {
    int stuffProcesssed = doStuff();
    meter.mark(stuffProcesssed);
}

虽然 mark.meter 可以为您提供最近几分钟的速率和总速率(或从应用程序启动开始),但据我所知,没有选择任意时间间隔的能力。 - Sasha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接