如何为某些 Spring Boot Micrometer 指标提供标签而不是其他指标?

How to provide tags for some Spring Boot Micrometer metrics but not others?

我正在使用 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,然后即时忽略它。似乎不起作用,但即使它起作用也可能不是最佳选择

您的 MeterFilter 方法是正确的。我不确定为什么您尝试的方法不起作用。这可能是由于千分尺使用点符号这一事实。您使用的下划线看起来像是您在普罗米修斯中看到的指标。您可以尝试“http.server.requests”,但这会影响 _sum_count_max.

您可以考虑创建一个单独的仪表来独立控制标签。

或者,如果您使用的是 Prometheus,则可以使用重新标记配置来删除不需要的标签。但这可能会导致与普罗米修斯丢弃的其他桶发生碰撞。在那种情况下我不确定。