如何正确使用千分尺?

Posted

技术标签:

【中文标题】如何正确使用千分尺?【英文标题】:How to use Micrometer Gauge the correct way? 【发布时间】:2019-08-20 12:21:50 【问题描述】:

假设我有一个应用程序,其中 REST API 更新产品的价格。我想使用千分尺将新价格作为指标公开。我无法从 Micrometer 文档中理解这应该如何完成。 唯一对我有用的toDoubleFunction 是在我的 ProductService 中创建一个新方法,它返回它的价格。对于我想作为指标公开的每条数据来说,这似乎都是一种开销。 我在这里想念什么?为什么 product.getPrice() 不足以更新 Gauge?

【问题讨论】:

请包含您的无效代码。假设它没有被垃圾收集,仪表可以使用product.getPrice()。您更有可能希望将价格缓存在地图中并使用地图驱动仪表。 【参考方案1】:

Micrometer 的Gauge 将持有对它必须从中提取值的任何内容的引用。默认情况下,该引用是WeakReference

例如:

StatsdGauge DefaultGauge

这意味着如果您提供的值被垃圾收集,千分尺将无法从中轮询值。

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

您有几个解决方案:使用构建器构建 Gauge 并指定 strongReference(true) 或(更好)确保您自己持有您的引用并管理它们的值。

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

【讨论】:

以上是关于如何正确使用千分尺?的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot 中,如何在每次测试之前重置指标注册表?

千分尺公制更新值慢?

如何使用千分尺指定我想在spring-boot中使用的指标的白名单

如何使用千分尺指定我想要在spring-boot中使用的度量标准的白名单

Spring-boot千分尺定时器()它是如何工作的?

如何配置spring-boot千分尺以推入elasticsearch?