首页 > 解决方案 > 为某些默认标签聚合了 @Timed 的直方图存储桶

问题描述

我正在为 http 请求启用直方图,所以我可以在 prometheus 中使用 histogram_quantile。

所以我已经配置management.metrics.distribution.percentiles-histogram[http.server.requests]: true并设置了 minimum-expected-value 和 maximum-expected-value 以防止过多的桶并尝试减少基数。

默认情况下,spring-boot 为任何 @RestController(异常、方法、结果、状态、uri)设置以下 WebMvc 标记。例如,对于 http_server_requests_seconds_count 指标,它们非常有用(并且已使用)。

但是,对于直方图,它会创建 http_server_requests_seconds_bucket。存储桶列表的大小已减少了最小值/最大值,但它会为每个唯一的标签组合创建存储桶。我不太关心为每个异常或结果指定响应时间段。对于 uri/method,请。

文档说要替换默认标签,以提供实现 WebMvcTagsProvider 的 @Bean。但我不想替换它们,因为我仍然希望它们用于 http_server_requests_seconds_count,我只是不需要它们用于直方图。

无论如何配置它以聚合特定标签的直方图桶?

标签: spring-bootprometheusmicrometer

解决方案


在 Prometheus 方面,您应该能够聚合指标,您无需指定不想深入研究的标签。但是如果你以后想要它们,你可以使用它们:

例如:

sum(rate(http_server_requests_seconds_bucket{le="30.0"}[5m]))

对比

sum(rate(http_server_requests_seconds_bucket{uri="/smtg", le="30.0"}[5m])) by (status)

因此,如果您想要更精细的数据,那里的标签可以帮助您,它们不会阻止您查看全局。

见:https ://prometheus.io/docs/practices/histograms/

如果你根本不想在 Prometheus 中有这些标签,你可以使用 aMeterFilter来移除它们。


推荐阅读