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 并保持在那里。像这样:
- 00:00 应用程序开始(行位于 0)
- 00:01 方法调用(行转到 1)
- 00:02 方法调用(行转到 2)
- 00:03 方法调用(行转到 3)
- 00:04 什么都没发生(行停留在3)
- 00:05 什么都没发生(行停留在3)
- ...
- 00: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')
并且还应该根据落入所选聚合间隔的碳的保留期(一个或多个)进行缩放。
正如标题所暗示的,我正在使用上面的堆栈来深入了解特定方法随时间调用的频率。
这是在代码中设置收集指标的方式:
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 并保持在那里。像这样:
- 00:00 应用程序开始(行位于 0)
- 00:01 方法调用(行转到 1)
- 00:02 方法调用(行转到 2)
- 00:03 方法调用(行转到 3)
- 00:04 什么都没发生(行停留在3)
- 00:05 什么都没发生(行停留在3)
- ...
- 00: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')
并且还应该根据落入所选聚合间隔的碳的保留期(一个或多个)进行缩放。