После обновления до Spring Boot 2, как выставить метрики кеша для prometheus?
Я недавно обновил приложение весенней загрузки с 1.5 до 2.0.1. Я также перенес интеграцию с Prometheus в новый подход с использованием микрометра. Большинство вещей работает сейчас - в том числе некоторые пользовательские счетчики и датчики.
Я отметил новую конечную точку Прометея /actuator/prometheus
больше не публикует метрики пружинного кэша (размер и соотношение попаданий).
Единственное, что я смог найти, - это проблема и связанная с ней фиксация.
Тем не менее я не могу получить метрики кэша при экспорте Прометея. Я попробовал настройки некоторых свойств:
management.metrics.cache.instrument-cache=true
spring.cache.cache-names=cache1Name,cache2Name...
Но на самом деле ничего не работает. Я вижу, как запускается менеджер кэша Hazelcast, регистрирует компонент управления кэшем и т. Д., Но ни то, ни другое /metrics
ни /prometheus
показать любую статистику. Кеши заполняются с помощью @Cacheable
аннотаций. Это работало с Spring Boot 1.5 - я думаю, что через Hazelcast выставил свои метрики через JMX, а экспортер прометей поднял его оттуда?
Не уверен теперь, как связать это вместе. Любые намеки приветствуются!
2 ответа
Когда вы ответили на мой вопрос, я могу дать ответ на этот вопрос.
мои кеши создаются позже с помощью запланированных задач
Тогда этот раздел документа относится к вам:
Только кэши, которые доступны при запуске, привязаны к реестру. Для кэшей, созданных на лету или программно после фазы запуска, требуется явная регистрация. Для облегчения этого процесса доступен компонент CacheMetricsRegistrar.
Таким образом, вы должны зарегистрировать такие кэши самостоятельно, надеюсь, это довольно просто, что-то вроде:
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);
}
}
Вы можете включить этот код в свой существующий код. Если вы не хотите этого делать, вам нужно что-то еще, что запускается после вашего существующего кода, чтобы зарегистрировать эти кэши в реестре.
Только кэши, настроенные при запуске, привязаны к реестру. Для кэшей, не определенных в конфигурации кэша, таких как кэши, созданные на лету или программно после фазы запуска, требуется явная регистрация. Доступен bean-компонент CacheMetricsRegistrar, чтобы упростить этот процесс.
ключ в том, как получить CacheMetricsRegistrar?
если вы используете CaffineCache, сначала создайте компонент CacheMetricsRegistrar в классе конфигурации, как показано в следующем коде.
@Configuration
public class AppConfig {
@Autowired
private MeterRegistry meterRegistry;
@Bean
public CacheMetricsRegistrar cacheMetricsRegistrar() {
return new CacheMetricsRegistrar(meterRegistry, Lists.newArrayList(new CaffeineCacheMeterBinderProvider()));
}
}
а затем код класса компонента, подобный этому, в соответствии с вашими потребностями
// inject the cacheMetricsRegistrar
@Autowired
private CacheMetricsRegistrar cacheMetricsRegistrar;
private final LoadingCache<String, String> MY_CACHE = Caffeine
.newBuilder()
.recordStats()
.expireAfterAccess(10, TimeUnit.MINUTES)
.maximumSize(100000)
.build(this::getFromRedis);
@PostConstruct
public void init() {
// LoadingCache -> Cache
Cache cache = MY_CACHE;
// bindCacheToRegistry
cacheMetricsRegistrar.bindCacheToRegistry(new CaffeineCache("MY_CACHE", cache), Tag.of("name", "MY_CACHE"));
}