spring - 如何正确使用千分尺?

标签 spring prometheus metrics micrometer

假设我有一个应用程序,其中 REST API 更新产品价格。
我想使用测微计将新价格显示为指标。我无法从 Micrometer 文档中理解如何完成此操作。

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

我在这里错过了什么?为什么 product.getPrice() 不足以更新 Gauge?

最佳答案

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

例如:

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

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

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

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

关于spring - 如何正确使用千分尺?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55419471/

相关文章:

java - Spring Boot + Thymeleaf 的@WebAppConfiguration 和@ContextConfiguration

java - jdbc 模板故障安全 IN 语句

java - 没有 Spring 上下文的集成测试

javascript - 动态创建 Prometheus 仪表名称

metrics - 每日活跃用户 (DAU) 的定义

reactjs - 为什么授权 header token 未显示在我的浏览器中

kubernetes - 如何将 Istio 与 Prometheus 集成

kubernetes - 如何在Kubernetes中查看外部指标数据?

graph - StatsD 和 Graphite 的 stats_counts 指标问题

grails - 带有 Dropwizard 指标的 grails 中的注释不起作用