Prometheus 的最新版本会在抓取请求的
q=2
标头中向 Accept
发送无效的 /actuator/prometheus
值。请参阅https://github.com/prometheus/prometheus/issues/13268。这会导致 406 Not Acceptable
响应,因为 Spring Boot 无法正确解析 Accept
标头。
有没有办法解决这个问题,直到上游得到解决?
使用 Spring WebFlux,可以使用
WebFilter
来修改入站请求,使其有效。 Kotlin 中的示例:
@Component
class InvalidQValuesFilter : WebFilter {
override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> {
val acceptHeader = exchange.request.headers[HttpHeaders.ACCEPT]
if (acceptHeader?.any { it.contains("*/*;q=2") } == true) {
exchange.request.mutate().headers { headers ->
headers[HttpHeaders.ACCEPT] = acceptHeader.map {
it.replace("*/*;q=2", "*/*;q=0.1")
}
}
}
return chain.filter(exchange)
}
}