首页 > 解决方案 > 以微米为单位的请求范围公共标记

问题描述

我接受一个国家作为我的应用程序中所有休息控制器的路径参数。我想用国家标记我的所有指标(Micrometer -> Prometheus)。我几乎可以在任何地方使用来自 HttpServletRequest 的标签值创建指标,但有一些限制。

  1. 我需要有自己的通用注释实现,比如@Timed-> 嗯,这不方便,但我可以使用它
  2. 我不能使用像http_server_requests_seconds_count{status="200"}-> OK 这样的默认指标,这也不方便,但我可以创建自己的方面来跟踪响应。
  3. 我不能使用默认指标(我使用 Redis)来计算缓存使用情况,例如cache_gets_total{result="miss"}->这是我的真正问题。

我尝试了什么?我尝试使用MeterRegistryCustomizer添加一个通用标签,如下所示:

@Configuration
public class MetricsConfig {

@Bean
    MeterRegistryCustomizer<MeterRegistry> configurer(HttpServletRequest request) {
        return (registry) -> registry.config().commonTags("country", request.get....);
    }
}

听起来很优雅,但我不能在这里使用请求范围的 HttpServletRequest。这是有道理的——指标是在应用程序启动时使用 bean 构建的,不应该根据请求重新创建。

所以我想遵循与问题 1 和 2 相同的方式 - 为缓存创建一些自定义计数器,@Around(value = "@annotation(org.springframework.cache.annotation.Cacheable)")但我不知道如何在这方面获取缓存状态。

第三个想法是自定义RedisCacheMetrics,但我找不到在此处添加请求范围标记的方法,因为它也是在应用程序启动时创建的。

我会感激所有的想法。

标签: javaspringcachingtagsmetrics

解决方案


推荐阅读