如何为某些 Spring Boot Micrometer 指标提供标签,但不为其他指标提供标签?
Posted
技术标签:
【中文标题】如何为某些 Spring Boot Micrometer 指标提供标签,但不为其他指标提供标签?【英文标题】:How to provide tags for some Spring Boot Micrometer metrics but not others? 【发布时间】:2021-07-30 20:58:20 【问题描述】:我正在使用 Spring Boot Micrometer,它会生成 http_server_requests_seconds_bucket
、http_server_requests_seconds_sum
、http_server_requests_seconds_count
、http_server_requests_seconds_max
等指标。
我正在使用WebFluxTagsProvider
为这些指标添加标签
@Bean
public WebFluxTagsProvider webFluxTagsProvider()
return (serverWebExchange, throwable) ->
HttpHeaders headers = serverWebExchange.getRequest().getHeaders();
return ImmutableList.of(
Tag.of(
"my_tag",
Objects.toString(headers.getFirst("tag_value"), "")));
;
“my_tag”值正确显示在上述所有指标中。
但http_server_requests_seconds_bucket
指标的基数太高。这是一个不需要“my_tag”的指标。
如何将该标签添加到除http_server_requests_seconds_bucket
之外的所有指标?
编辑
我尝试了这个解决方案,但它不起作用,但也许我做错了
@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags()
return registry ->
registry
.config()
.meterFilter(
MeterFilter.maximumAllowableTags(
"http_server_requests_seconds_bucket",
"my_tag",
0,
MeterFilter.ignoreTags("my_tag")
));
我想我可以将最大标签设置为 0,然后即时忽略它。似乎不起作用,但即使它起作用也可能不是最佳的
【问题讨论】:
【参考方案1】:使用MeterFilter
方法,您走在了正确的轨道上。我不确定为什么您尝试的方法不起作用。这可能是由于千分尺使用点符号的事实。您使用的下划线看起来就像是您在 Prometheus 中看到的指标。您可以尝试“http.server.requests”,但这会影响_sum
、_count
和_max
。
您可以考虑创建一个单独的仪表来独立控制标签。
或者,如果您使用 Prometheus,您可以使用重新标记配置来删除不需要的标签。但这可能会导致与 Prometheus 会丢弃的其他存储桶发生碰撞。在那种情况下我不确定。
【讨论】:
是的,您在这里所说的一切都是正确的。看起来解决方案是创建一个单独的指标。以上是关于如何为某些 Spring Boot Micrometer 指标提供标签,但不为其他指标提供标签?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Spring Boot 应用程序的 gradle 构建设置活动配置文件?
如何为具有 Spring Security 配置的 Spring Boot API 编写单元测试