升级到 Spring Boot 2 后,如何向 prometheus 公开缓存指标?
Posted
技术标签:
【中文标题】升级到 Spring Boot 2 后,如何向 prometheus 公开缓存指标?【英文标题】:after upgrade to Spring Boot 2, how to expose cache metrics to prometheus? 【发布时间】:2018-09-16 17:37:09 【问题描述】:我最近将一个 Spring Boot 应用程序从 1.5 升级到了 2.0.1。我还将 prometheus 集成迁移到使用千分尺的新执行器方法。大多数事情现在都可以正常工作 - 包括一些自定义计数器和仪表。
我注意到新的 prometheus 端点 /actuator/prometheus
不再发布 Spring 缓存指标(大小和命中率)。
我唯一能找到的是this 问题及其相关的commit。
我仍然无法获取 prometheus 导出的缓存指标。我尝试设置一些属性:
management.metrics.cache.instrument-cache=true
spring.cache.cache-names=cache1Name,cache2Name...
但没有什么真正有效。我可以看到 Hazelcast 缓存管理器启动,注册缓存管理器 bean 等等 - 但/metrics
和 /prometheus
都没有显示任何统计信息。使用@Cacheable
注释填充缓存。这适用于 Spring Boot 1.5 - 我认为通过 Hazelcast 通过 JMX 公开其指标,prometheus 导出器从那里获取它?
现在不确定如何将它们连接在一起。欢迎任何提示!
【问题讨论】:
你有read the dedicated section of the documentation吗?如果您使用 Hazelcast,则设置缓存名称是错误的,因为该属性的目的是为您创建缓存。如果你有一个最小的样本可以重现我可以自己运行的问题,我很乐意看看它。 您好,感谢您的回复!是的,看到了该部分,但我无法理解 CacheMetricsRegistrarConfiguration 在什么时候运行(我很早就假设),但我的缓存稍后是通过计划任务创建的,因此方法 bindCacheManagerToRegistry 看不到任何缓存。设置属性“spring.cache.cache-names”只是一个绝望的实验。我将尝试剥离应用程序来证明这一点。 不需要,您的案例已经在文档中有明确的部分。我已经添加了答案。 我担心这就是答案。我认为缓存必须更早地知道,并且它的名称以“缓存”开头 - 我创建了精简版:github.com/wemu/mobitor-parent-cache-example/blob/… - 但我不知道为什么。注册可以移动到 CacheManagerWrapper 或类似的东西吗?还是会导致其他影响?我的缓存实际上是插件的一部分,目前我没有它们的完整列表。 【参考方案1】:既然你已经回答了我的问题,我可以提供一个答案。
我的缓存稍后会通过计划任务创建
那么文档的这一部分适用于您:
只有启动时可用的缓存才绑定到注册表。对于在启动阶段之后即时或以编程方式创建的缓存,需要显式注册。可以使用 CacheMetricsRegistrar bean 来简化该过程。
所以你必须自己注册这样的缓存,希望这很容易,比如:
public class MyComponent
private final CacheMetricsRegistrar cacheMetricsRegistrar;
private final CacheManager cacheManager
public MyComponent(CacheMetricsRegistrar cacheMetricsRegistrar,
CacheManager cacheManager) ...
public void register()
// you have just registered cache "xyz"
Cache xyz = this.cacheManager.getCache("xyz");
this.cacheMetricsRegistrar.bindCacheToRegistry(xyz);
您可以在现有代码中包含此代码。如果您不想这样做,那么您需要在现有代码之后运行其他东西来将这些缓存注册到注册表。
【讨论】:
我得到这个......出于某种原因。找到以下候选但无法注入: - 'CacheMetricsRegistrarConfiguration' 中的 Bean 方法 'cacheMetricsRegistrar' 未加载,因为 @ConditionalOnBean(类型:org.springframework.boot.actuate.metrics.cache.CacheMeterBinderProvider,io.micrometer.core.instrument .MeterRegistry; SearchStrategy: all) 没有找到任何 org.springframework.boot.actuate.metrics.cache.CacheMeterBinderProvider 类型的 bean 我遇到与@TheJeffCacheMeterBinderProvider
bean 未找到相同的错误,因此未加载到上下文中。以上是关于升级到 Spring Boot 2 后,如何向 prometheus 公开缓存指标?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot - 从 2.2.5 升级到 2.3.0 后验证停止工作
升级到 Spring Boot 版本 2 后 Prometheus 无法正常工作
升级到 Spring Boot 2.2.2 后应用程序启动缓慢
Spring Boot - 从 2.2.5 升级到 2.5.7 后,应用程序无法启动