es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Métricas de la caché de Redis con Prometheus (Spring Boot)

Estoy utilizando RedisTemplate con fines de almacenamiento en caché en mi servicio de Spring Boot. Ahora quiero verificar si se realiza un acierto o fallo de caché a través del punto de acceso actuator/prometheus. Pero no puedo ver los datos de aciertos o fallos de caché en la caché.
El código que he escrito es algo como esto:

@EnableCaching
@Configuration
public class CachingConfiguration {

    @Bean
    public RedisTemplate<string, somedata=""> redisTemplate(LettuceConnectionFactory connectionFactory, ObjectMapper objectMapper) {
        RedisTemplate<string, somedata=""> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);

        var valueSerializer = new Jackson2JsonRedisSerializer<somedata>(SomeData.class);
        valueSerializer.setObjectMapper(objectMapper);
        template.setValueSerializer(valueSerializer);

        return template;
    }
}

Ahora estoy haciendo lo siguiente para obtener y guardar en caché:

Para obtener:

redisTemplate.opsForValue().get(key);

Para guardar:

redisTemplate.opsForValue().set(key, obj, some_time_limit);

Mi caché funciona correctamente, puedo guardar en caché y obtener los datos adecuados.
Pero no veo datos relacionados con aciertos/fallos de caché en actuator/prometheus.
En mi archivo application.yml he agregado lo siguiente:

cache:
    redis:
        enable-statistics: 'true'

</string,></string,>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para habilitar los contadores de hit o miss en la caché de Redis en actuator/prometheus, puedes realizar los siguientes cambios en tu código y configuración:

    1. Agrega la dependencia io.micrometer:micrometer-registry-prometheus en tu archivo pom.xml si aún no está presente.
    2. Agrega el bean io.micrometer.core.instrument.binder.cache.RedisCacheMetricsBinder a tu configuración. Este bean vinculará las métricas de la caché de Redis al registro de Micrometer.

      @Bean
      public RedisCacheMetricsBinder redisCacheMetricsBinder(@Autowired RedisConnectionFactory redisConnectionFactory) {
         RedisCacheManager cacheManager = RedisCacheManager.builder(redisConnectionFactory).build();
         RedisCacheMetricsBinder binder = new RedisCacheMetricsBinder(cacheManager);
         binder.bindTo(registry);
         return binder;
      }
      

      El RedisCacheMetricsBinder requiere que se le pase un RedisCacheManager en su constructor. Puedes crear un bean RedisCacheManager en tu configuración de la siguiente manera:

      @Bean
      public RedisCacheManager cacheManager(@Autowired RedisConnectionFactory redisConnectionFactory) {
         RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                 .entryTtl(Duration.ofMinutes(30))
                 .disableCachingNullValues();
         return RedisCacheManager.builder(redisConnectionFactory)
                 .cacheDefaults(cacheConfiguration)
                 .build();
      }
      

      Este bean cacheManager configura las propiedades de caché de Redis predeterminadas, como el tiempo de expiración y el manejo de valores nulos.

    3. Cambia el tipo de bean redisTemplate a StringRedisTemplate, que es una subclase de RedisTemplate diseñada específicamente para la caché. StringRedisTemplate utiliza automáticamente el serializador de JSON de Redis para la caché, por lo que no es necesario especificarlo por separado.

      @Bean
      public StringRedisTemplate redisTemplate(@Autowired RedisConnectionFactory redisConnectionFactory) {
         StringRedisTemplate template = new StringRedisTemplate(redisConnectionFactory);
         template.setEnableTransactionSupport(true);
         return template;
      }
      

      Ten en cuenta que StringRedisTemplate también permite el soporte de transacciones de forma predeterminada, lo cual puede ser útil en algunos casos.

    4. Agrega las siguientes propiedades de configuración a tu archivo application.yml para habilitar las estadísticas de la caché de Redis:

      management:
       endpoints:
         web:
           exposure:
             include: cachemetrics
       metrics:
         export:
           prometheus:
             enabled: true
      

      La propiedad exposure.include habilita el punto final cachemetrics, que expone las métricas de la caché en formato JSON. La propiedad metrics.export.prometheus.enabled habilita el punto final de Prometheus, que exporta las métricas de la caché en formato Prometheus.

      Una vez que realices estos cambios y ejecutes tu aplicación Spring Boot, deberías poder ver los contadores de hit o miss de la caché en actuator/prometheus. Puedes acceder al punto final cachemetrics en http://localhost:8080/actuator/cachemetrics` y al punto final de Prometheus enhttp://localhost:8080/actuator/prometheus`.

Comments are closed.