spring-boot - 为某些默认标签聚合了 @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,我只是不需要它们用于直方图。
无论如何配置它以聚合特定标签的直方图桶?
解决方案
在 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
来移除它们。