Исключение, перехваченное @ExceptionHandler, не записывается MetricsWebFilter

#spring-boot #spring-webflux #spring-boot-actuator #spring-micrometer

#весенняя загрузка #spring-webflux #spring-boot-actuator #весна-микрометр

Вопрос:

Пытаюсь перейти с web-mvc на сопрограммы webflux . Столкнулся с проблемой с http.server.requests записью метрики.

С web-mvc, при использовании @RestController, @RestControllerAdvice с несколькими @ExceptionHandler, я получил классы исключений, записанные в exception теге метрики http.server.requests . Вот так http_server_requests_seconds_count{exception="CustomException",method="POST",outcome="CLIENT_ERROR",status="400",uri="/v1/users",} 1.0

Однако это отказывается работать должным образом с webflux (spring boot 2.3.4). Я использовал те же аннотированные компоненты.
http_server_requests_seconds_count{exception="None",method="POST",outcome="CLIENT_ERROR",status="400",uri="/v1/users",} 1.0
В этом случае происходит вызов MetricsWebFilter.onSuccess(…), у которого нет параметра исключения.
Требуемый exception тег заполняется только для исключений, не перехваченных @RestControllerAdvice. Это может показаться разумным, но это неожиданно и усложняет мониторинг служб для меня.

Может быть, есть способ добиться старого поведения?

Комментарии:

1. может ли это быть проблемой с заказом? Возможно ли вам отладить ваше приложение и посмотреть, какой порядок вызова происходит между MetricsWebFilter и ExceptionHandlerMethodResolver . Если разрешение исключения происходит до фильтра метрик, фильтр метрик вообще не увидит исключения.

2. Как я вижу, в любом случае (mvc / webflux) metrics-filter завершает свою работу после разрешения исключения. Однако в контексте mvc обработанное исключение, похоже, каким-то образом находится в контексте запроса, и metrics-filter извлекает его. Что касается webflux, мне не удалось переопределить порядок в компоненте MetricsWebFilter.. Чувствую, что мне, вероятно, следует открыть проблему для этого в конце концов.

3. для справки я использовал пользовательскую реализацию WebExceptionHandler для обработки разрешения исключений, и это применяется после MetricsWebFilter , что позволяет корректировать теги исключений в метриках. Открытие проблемы звучит как хороший следующий шаг. Удачи

4. проблема с открытой весенней загрузкой github.com/spring-projects/spring-boot/issues/23795