1

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

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

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

    // perform search
    // ...
  }

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

Grafana 中的图形配置

这就是结果图的样子:

结果图

如您所见,当没有方法调用时,该行停留在最新值。当我停止应用程序时,发生了几次下降到 0(就在开始的两个大“驼峰”和结尾的另一个大“驼峰”之后)。

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

  • 00:00应用程序开始(行在0处)
  • 00:01方法调用(第1行)
  • 00:02方法调用(第2行)
  • 00:03方法调用(第3行)
  • 00:04 什么也没有发生(线停留在3
  • 00:05 什么也没发生(线停留在3
  • ...
  • 00:30 没有任何反应(线路下降到0

相反,在这种情况下, Meter的行为似乎就像Counter一样——在应用程序的整个生命周期中递增值。

编辑:即使设置了“显示样式”->“零点模式”->“零”,这也是图表的样子。图表看起来与显示样式 -> 空点模式 -> 空设置完全相同。

在此处输入图像描述

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

感谢大家的帮助。

4

3 回答 3

1

对于图形,“显示样式”选项卡下有一个选项,您可以在其中选择如何处理空值。如果选择了已连接,那么您将看到您描述的行为。还有其他两个选项,null -> no line 或null as zero -> line 下降到零。

在旧版本的 Grafana 上,该选项是调用 Null 点模式(此处的文档

这是 Grafana 3.1 中选项的屏幕截图:

空值下拉

于 2016-07-08T11:52:59.203 回答
1

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

潜在的解决方案包括:

  • 切换到滑动时间窗口存储库(性能最低,最容易实现)
  • 每次报告/记录数据时刷新值

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

于 2016-08-08T17:31:14.420 回答
0

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

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

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

于 2016-11-23T15:42:00.953 回答