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

如何为 Spring Boot 应用程序的 gradle 构建设置活动配置文件?

如何为 Spring Boot Rest 使用自定义异常?

如何为具有 Spring Security 配置的 Spring Boot API 编写单元测试

如何为 Spring Boot 应用程序配置端口

如何为 Spring Boot 2 添加自定义 MeterRegisty

如何为批量插入配置spring boot和data jpa