如何为某些 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_buckethttp_server_requests_seconds_sumhttp_server_requests_seconds_counthttp_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 指标提供标签,但不为其他指标提供标签?的主要内容,如果未能解决你的问题,请参考以下文章