使用 Prometheus 监控 spring 引导缓存指标
Monitoring spring boot cache metrics with Prometheus
我正在尝试使用 prometheus 从 spring-boot 监控一些缓存指标。缓存是用@Cacheable
创建的,我的配置如下:
management.endpoints:
web.exposure.include: "*"
metrics.enabled: true
prometheus.enabled: true
management.metrics:
export.prometheus.enabled: true
cache.instrument: true
我的缓存是用一个简单的 @Cacheable('mycache')
创建的 - 我没有其他缓存代码或设置。 我也没有使用任何特定的缓存,只是提供了内置缓存。
我确实在 /actuator/caches/
列表中看到了我的缓存,但在 /metrics
或 /prometheus
端点中都没有详细说明。
我的预期是某些缓存指标会同时发布到 /actuator/metrics
和 /actuator/prometheus
端点。
我看到了一些关于手动需要注册缓存的注释,但我也无法让它工作(我也不确定它是否真的适用)。尝试执行此操作时,问题是我无法在 CacheMetricsRegistrar
bean 中自动装配。没找到。
看来你的 属性 错了,应该是 endpoint 和额外的 s
你的属性应该是management.endpoint.prometheus.enabled
您可以在此处参考所有执行器属性
编辑:
提到的端点 属性 根据 Spring boot 2.2
编辑 2
在阅读有关执行器缓存的更多信息时,在此 URL 上 #6.3.5。缓存指标,我发现
Only caches that are available on startup are bound to the registry.
For caches created on-the-fly or programmatically after the startup
phase, an explicit registration is required. A CacheMetricsRegistrar
bean is made available to make that process easier.
我进一步探索了 CacheMetricsRegistrar 并在此 URL 找到了一个示例,我在我的执行器示例项目中实现了它。
现在我可以在 Prometheus URL 的应用程序中看到书籍缓存详细信息,如下所示
# TYPE cache_gets_total counter
cache_gets_total{cache="books",cacheManager="cacheManager",name="books",result="hit",} 4.0
cache_gets_total{cache="books",cacheManager="cacheManager",name="books",result="miss",} 2.0
内置的基于散列图的缓存没有 Micrometer 活页夹。请参阅 https://github.com/micrometer-metrics/micrometer/tree/master/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/cache 以了解开箱即用的实现。
这些实施会自行跟踪其 hit/miss 计数。由于没有任何东西在跟踪 hashmap 不在跟踪指标,因此有 none 可用表面。
正如 checketts 所说,对于 ConcurrentHashMap
.
支持的简单实施,micrometer 没有注册指标
Spring 引导中支持指标的缓存库也列在那里:https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-metrics-cache。
它还说
Only caches that are configured on startup are bound to the registry.
这意味着你必须在启动时声明你想要监控的缓存,像这样:
spring.cache.cache-names=books
您会在 application.properties 中找到此 属性,请参阅:https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#common-application-properties-cache。
如果你想测试,添加例如Caffeine :
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
然后,如果 prometheus 端点已激活,您将看到以下示例:
# TYPE cache_size gauge
cache_size{cache="books",cacheManager="cacheManager",name="books",} 2.0
使用 Spring Boot 2.4
测试的代码
我正在尝试使用 prometheus 从 spring-boot 监控一些缓存指标。缓存是用@Cacheable
创建的,我的配置如下:
management.endpoints:
web.exposure.include: "*"
metrics.enabled: true
prometheus.enabled: true
management.metrics:
export.prometheus.enabled: true
cache.instrument: true
我的缓存是用一个简单的 @Cacheable('mycache')
创建的 - 我没有其他缓存代码或设置。 我也没有使用任何特定的缓存,只是提供了内置缓存。
我确实在 /actuator/caches/
列表中看到了我的缓存,但在 /metrics
或 /prometheus
端点中都没有详细说明。
我的预期是某些缓存指标会同时发布到 /actuator/metrics
和 /actuator/prometheus
端点。
我看到了一些关于手动需要注册缓存的注释,但我也无法让它工作(我也不确定它是否真的适用)。尝试执行此操作时,问题是我无法在 CacheMetricsRegistrar
bean 中自动装配。没找到。
看来你的 属性 错了,应该是 endpoint 和额外的 s
你的属性应该是management.endpoint.prometheus.enabled
您可以在此处参考所有执行器属性
编辑: 提到的端点 属性 根据 Spring boot 2.2
编辑 2
在阅读有关执行器缓存的更多信息时,在此 URL 上 #6.3.5。缓存指标,我发现
Only caches that are available on startup are bound to the registry. For caches created on-the-fly or programmatically after the startup phase, an explicit registration is required. A CacheMetricsRegistrar bean is made available to make that process easier.
我进一步探索了 CacheMetricsRegistrar 并在此 URL 找到了一个示例,我在我的执行器示例项目中实现了它。
现在我可以在 Prometheus URL 的应用程序中看到书籍缓存详细信息,如下所示
# TYPE cache_gets_total counter
cache_gets_total{cache="books",cacheManager="cacheManager",name="books",result="hit",} 4.0
cache_gets_total{cache="books",cacheManager="cacheManager",name="books",result="miss",} 2.0
内置的基于散列图的缓存没有 Micrometer 活页夹。请参阅 https://github.com/micrometer-metrics/micrometer/tree/master/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/cache 以了解开箱即用的实现。
这些实施会自行跟踪其 hit/miss 计数。由于没有任何东西在跟踪 hashmap 不在跟踪指标,因此有 none 可用表面。
正如 checketts 所说,对于 ConcurrentHashMap
.
Spring 引导中支持指标的缓存库也列在那里:https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-metrics-cache。
它还说
Only caches that are configured on startup are bound to the registry.
这意味着你必须在启动时声明你想要监控的缓存,像这样:
spring.cache.cache-names=books
您会在 application.properties 中找到此 属性,请参阅:https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#common-application-properties-cache。
如果你想测试,添加例如Caffeine :
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
然后,如果 prometheus 端点已激活,您将看到以下示例:
# TYPE cache_size gauge
cache_size{cache="books",cacheManager="cacheManager",name="books",} 2.0
使用 Spring Boot 2.4
测试的代码