Конверт: Springboot-2.0.7.RELEASE (встроенный tomcat-8.5.35), JDK-1.8.0_181, микрометр-реестр-прометей-1.0.8
Описание: использование @Timed
в методе контроллера и WebMvcMetricsFilter
в пользовательском режиме WebMvcTagsProvider
.
Демонстрационный проект: https://github.com/kenix/resp-mix
Если PrometheusMeterRegistry
уже создал счетчик с набором тегов, он не создаст еще один счетчик с тем же именем и набором других тегов. Выдает IllegalArgumentException
с вышеупомянутой причиной. Это происходит после обычной обработки запроса, которая является успешной (ответ теперь имеет преобразованный JSON). Исключение не перехватывается в WebMvcMetricsFilter
Spring (то есть перехватывается исключение в его catch
-классе. Кстати, ControllerAdvice
не помогает), но перехватывается StandardHostValve
tomcat, который выдает свое собственное сообщение об ошибке (он не может знать, откуда это исключение) в ответ тоже. Это приводит к недопустимому JSON как результату.
Вопрос 1: должен ли WebMvcMetricsFilter
поймать и обработать это Исключение, выданное PrometheusMeterRegistry
, и не бросать его дальше?
Вопрос 2: видел, что исключение в цепочке фильтров перед выполнением фактической обработки обрабатывается, как и ожидалось. Как насчет исключения после успешной фактической обработки? Любые ссылки?
Для запуска этого случая:
curl -i localhost:8080/hi/foo/there
curl -i localhost:8080/hi/blah/there