java - 以微米为单位的请求范围公共标记
问题描述
我接受一个国家作为我的应用程序中所有休息控制器的路径参数。我想用国家标记我的所有指标(Micrometer -> Prometheus)。我几乎可以在任何地方使用来自 HttpServletRequest 的标签值创建指标,但有一些限制。
- 我需要有自己的通用注释实现,比如
@Timed
-> 嗯,这不方便,但我可以使用它 - 我不能使用像
http_server_requests_seconds_count{status="200"}
-> OK 这样的默认指标,这也不方便,但我可以创建自己的方面来跟踪响应。 - 我不能使用默认指标(我使用 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
,但我找不到在此处添加请求范围标记的方法,因为它也是在应用程序启动时创建的。
我会感激所有的想法。
解决方案
推荐阅读
- github - Git 从远程拉取并管理冲突
- node.js - 您如何使用 npm 请求模块让节点工作,目前在 Postman 中工作?
- javascript - websockets 是否发送和接收完整消息?
- python - 从 Swift 中的无限迭代器或生成器中获取前 N 个元素
- vim - 如何剪切一行,删除另一行,然后粘贴第一行?
- android - 底页布局高度问题
- json - 如何将 JSON 解码为模型对象列表
- javascript - 这个比较 jQuery 和 querySelectorAll 的测试是否准确?
- mysql - 如何确定是哪个用户自动创建了一条记录?
- javascript - 滚动到某个位置时如何更改导航栏颜色?