使用 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

您可以在此处参考所有执行器属性

https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#actuator-properties

编辑: 提到的端点 属性 根据 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

测试的代码