执行器报告状态 = 200 的指标,但控制器实际上响应了错误的请求。
MetricsWebFilter.error(ServerWebExchange Exchange, long start, Throwable Cause) 被调用,原因如下:
org.springframework.web.server.ServerWebInputException:响应状态 400,原因为“类型不匹配”;嵌套异常是 org.springframework.beans.TypeMismatchException:无法将类型“java.lang.String”的值转换为所需类型“java.util.List”;嵌套异常是 java.lang.NumberFormatException:对于输入字符串:“invalidSkuId”
但是,DefaultWebFluxTagsProvider 将状态标记解析为 200,因为它从交换获取状态(在本例中为 null),并且不考虑异常原因。
public static Tag status(ServerWebExchange exchange) {
HttpStatus status = exchange.getResponse().getStatusCode();
if (status == null) {
status = HttpStatus.OK;
}
return Tag.of("status", status.toString());
}
实际指标名称 httpServerRequests.exception.ServerWebInputException.method.POST.status。200.uri./GoodsService/getActiveGoods.do
预期指标名称为 httpServerRequests.exception.ServerWebInputException.method.POST.status。400.uri./GoodsService/getActiveGoods.do