@Timed аннотация в весенних метриках

Я использую аннотацию @Timed на контроллере String Boot rest, и он отлично работает. Метод из контроллера вызывает метод из сервиса, который также помечен @Timed.

Однако эта аннотация метода в последующем сервисном компоненте не работает (я не вижу результатов в /metrics). Почему это происходит? Можно ли это исправить?


person user_x    schedule 08.08.2018    source источник
comment
вы используете Dropwizard @Timed или что-то еще?   -  person Karol Dowbecki    schedule 08.08.2018
comment
это из io.micrometer.core.annotation   -  person user_x    schedule 08.08.2018
comment
хотя я импортировал «org.springframework.metrics:spring-metrics:latest.release»   -  person user_x    schedule 08.08.2018


Ответы (1)


В соответствии с Поддержка @Timed в любом компоненте, управляемом Spring #361, вы можете получить это поведение путем регистрации TimedAspect вручную.

@Configuration
@EnableAspectJAutoProxy
public class AutoTimingConfiguration {
  @Bean
  public TimedAspect timedAspect(MeterRegistry registry) {
    return new TimedAspect(registry);
  }
}

Обратите внимание, что согласно комментарию jkschneider в # 361:

Мы можем вернуться к применению @Timed через AOP или BPP в Boot 2.1, в зависимости от того, как сообщество отреагирует на эту функцию.

person Karol Dowbecki    schedule 08.08.2018
comment
Но как заставить его работать? Я получаю ошибку ClassNotFoundException: org.aspectj.lang.annotation.Around, и мне не удалось ее исправить... - person user_x; 08.08.2018
comment
@user_x вам не хватает зависимостей AspectJ, необходимых @EnableAspectJAutoProxy. Вы можете добавить spring-boot-starter-aop в качестве зависимости. - person Karol Dowbecki; 08.08.2018
comment
@user_x убедиться, что аспект применяется во время выполнения, например. просмотрев трассировку стека для TimedAspect. - person Karol Dowbecki; 08.08.2018
comment
@user_x также взгляните на код TimedAspect, чтобы увидеть название метрики (например, method.timed vs @Timed("myname"). - person Karol Dowbecki; 08.08.2018
comment
если аспект не применился во время выполнения - что делать? :) Я не думаю, что это проблема «названия». Я устанавливаю имя в сервисном методе в том же стиле, что и для метода контроллера. - person user_x; 08.08.2018
comment
@user_x Я подтвердил, что приведенная выше конфигурация работает с образцом: github. com/izeye/sample-micrometer-spring-boot/tree/, хотя я обнаружил еще одну проблему с контроллерами: github.com/micrometer-metrics/micrometer/issues/780 - person Johnny Lim; 09.08.2018
comment
@JohnnyLim спасибо, проверю позже, я вижу, вы используете немного более старую пружинную версию, может быть, это причина. - person user_x; 10.08.2018
comment
Кто-нибудь знает, работает ли это из коробки с CompletableFutures? Я получаю какие-то странные результаты, слишком низкие. - person Robert Gabriel; 15.04.2019