Dropwizard 指标 (Meter) 3.1.0 + InfluxDB 0.9.x + Grafana 停留在最新值

Dropwizard metrics (Meter) 3.1.0 + InfluxDB 0.9.x + Grafana stuck at the latest value

正如标题所暗示的,我正在使用上面的堆栈来深入了解特定方法随时间调用的频率。

这是在代码中设置收集指标的方式:

 public void searchProducts(Query query) {
    Meter meter = metricRegistry.meter(MetricRegistry.name("search.products"));
    meter.mark();

    // perform search
    // ...
  }

这是在 Grafana 中配置图表的方式:

结果图是这样的:

如您所见,当没有方法调用时,该行卡在最新值处。当我停止应用程序时,发生了几次下降到 0(在开始时两个大 'humps' 和最后一个大 'humps' 之后)。

在最后一个标记后经过一段时间后,线不应该下降到 0 吗?例如。应用程序启动后,发生了几个方法调用,每个方法调用之间经过 1 秒,然后在大约 30 秒后,该行应该返回到 0 并保持在那里。像这样:

相反,Meter in this case seems to behave just like the Counter - 在应用程序的整个生命周期内增加值。

编辑: 即使设置了 显示样式 -> 空点模式 -> 空为零 ,该图也是如此. 显示样式 -> 空点模式 -> null 设置的图形看起来完全相同。

更新:很抱歉延迟回复 - 直到最近我才回到这个问题。我找到了问题的根本原因——底层数据库是带有自定义指标报告器的 InfluxDB(InfluxDB 没有官方的)并且报告器逻辑中存在错误。

感谢大家的帮助。

对于图表,“显示样式”选项卡下有一个选项,您可以在其中选择如何处理空值。如果选择 connected,那么您将看到您描述的行为。还有其他两个选项,null -> 没有线或 null 为零 -> 线降为零。

在旧版本的 Grafana 上,选项是调用 Null 点模式 (docs here)

下面是Grafana 3.1中选项的截图:

这种类型的输出可能来自使用默认的 ExponentiallyDecayingReservoir。这将导致在没有最近的更新时返回最新的值。 水库永远不会被冲洗干净。

可能的解决方案包括:

  • 切换到滑动时间window 库(性能最低,最容易实现)
  • 每次 report/record 数据时刷新值

可以在此处找到更深入的 post (http://taint.org/2014/01/16/145944a.html)。

您可以使用仪表或计数器来总结或计算任意间隔的计数(总计):

hitcount(perSecond(your.count), '1day')

Afaik 它在里面做了所有的黑魔法。包括但不限于summarize(scaleToSeconds(nonNegativeDerivative(your.count),1), '1day') 并且还应该根据落入所选聚合间隔的碳的保留期(一个或多个)进行缩放。