如何重置Dropwizard指标的计时器?

3
我们正在处理定期到达的消息。我们使用Codahale Dropwizard Metrics的“计时器”来测量处理它们所需的时间。
我发现有人在这里提出了相同的问题:这里:“指数衰减水库的问题是,如果没有新数据进入,它将一直给出相同的数字。例如,假设您使用5和7更新了计时器(然后根本不放任何内容),那么无论您什么时候查看(即使是x小时后),计时器仍将显示平均值为6,这与最近5分钟毫不相关。因此,它只适用于数据一直到来的情况。”
正如您可以看到深蓝色线的图表一样:enter image description here 但是没有建议解决此问题。他们说不打算实施:https://github.com/dropwizard/metrics/issues/399 应该如何正确重置这些计时器或如何可视化它们,以免混淆?
2个回答

8
Note: It is too long for comment.

使用SlidingTimeWindowReservoir将覆盖大多数用例。 但正如this comment所指出的,根据事件数量可能会有问题: 它在内存中保留窗口中的所有测量值,在大量事件下变得不可接受。
我们能做得更好吗?让我们继续搜索。如果我们幸运的话,我们会找到this blog post。它描述了你的问题类型。有一个链接到他们简单肮脏的解决方案。还有一个使用HdrHistogram的建议。
此外,在指标邮件列表上也有几条关于这个问题的消息。对于示例,请参阅Marshall Pierce/hdrhistogram-metrics-reservoir。什么是HdrHistogram,为什么要使用它来测量延迟,请查看项目描述。
最后,在进一步挖掘后,您还可以找到vladimir-bukhtoyarov/metrics-core-hdr 项目。它也使用HdrHistogram
因此,有两个类似的库使用相同的数据结构并声称解决了您遇到的问题。

1
你的回答比我的详细多了 :) - Balazs Varhegyi

0
你可以使用 com.codahale.metrics.MetricRegistry 的 public boolean remove(String name) 方法(将计时器名称作为参数传递)来重新创建计时器,每次需要重置时都这样做。删除后,您可以使用相同的名称创建一个新的计时器。它将具有零计数器和其他指标。

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