正如 Headers 所示,我使用上面的堆栈来深入了解特定方法调用的频率 .
这是在代码中设置收集指标的方法:
public void searchProducts(Query query) {
Meter meter = metricRegistry.meter(MetricRegistry.name("search.products"));
meter.mark();
// perform search
// ...
}
这就是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 - 应用程序整个生命周期的递增值 .
EDIT: 以下是图表的样子,即使使用显示样式 - >零点模式 - > null,因为设置为零 . 图表看起来与显示样式完全相同 - >空点模式 - >空设置 .
UPDATE :抱歉延迟回复 - 最近才回到这个问题 . 我找到了问题的根本原因 - 底层数据库是InfluxDB,带有自定义Metrics Reporters(InfluxDB没有官方版本),并且记者逻辑中存在错误 .
谢谢大家的帮助 .
3 回答
对于图形,“显示样式”选项卡下有一个选项,您可以在其中选择如何处理空值 . 如果选择了连接,那么您将看到您描述的行为 . 还有另外两个选项,null - > no line或null as zero - > line drop to zero .
在旧版本的Grafana上,该选项是调用Null点模式(docs here)
以下是Grafana 3.1中选项的屏幕截图:
这种类型的输出可能来自使用默认的ExponentiallyDecayingReservoir . 这将导致在没有最近更新时返回最新值 . 水库永远不会被冲洗干净 .
潜在的解决方案包
每次报告/记录数据时
可以在这里找到更深入的帖子(http://taint.org/2014/01/16/145944a.html) .
您可以使用仪表或计数器来总结或计算每个任意间隔的计数(总计):
Afaik它完成了所有的黑魔法 . 包括但不限于
summarize(scaleToSeconds(nonNegativeDerivative(your.count),1), '1day')
,并且还应根据碳的保留期(一个或多个)进行缩放,这些保留期落入选定的聚合间隔 .