如何正确使用千分尺?

时间:2019-03-29 14:21:32

标签: spring prometheus metrics micrometer

说我有一个REST API更新产品价格的应用程序。
我想使用千分尺将新价格公开为指标。我无法从Micrometer文档中了解如何完成此操作。

唯一对我有用的toDoubleFunction是在我的ProductService中创建一个新方法,该方法返回其价格。这似乎是我要作为指标公开的每条数据的开销。

我在这里想念什么?为什么product.getPrice()不足以更新量规?

1 个答案:

答案 0 :(得分:0)

千分尺的Gauge将保留对其取值的引用。并且该引用默认为WeakReference

例如:

这意味着如果您提供的值被垃圾回收了,千分尺将没有任何东西可以轮询该值。

我认为,当您调用product.getPrice();时,您永远不会保留该值,而只是将其传递给类似meterRegistry.gauge("product.price",tags,value);的东西,因为在此代码块完成之后,没有什么东西可以强烈引用该特定值了它会收集垃圾(GC版)。

您在这里有几种解决方案:要么使用构建器构建Gauge并指定strongReference(true),要么(最好)确保自己保留引用并自己管理它们的值。

两者都很奇怪,因为您最终将在内存中保存很多“仪表源”。