Аннотации в Grails с метриками Dropwizard не работают

Я настраиваю метрики dropwizard для приложения Grails с аннотациями. Использование подключаемого модуля metrics-aspectj (https://github.com/astefanutti/metrics-aspectj)

У меня есть следующее в `BuildConfig.groovy'

compile 'io.astefanutti.metrics.aspectj:metrics-aspectj:1.1.0'
compile 'io.dropwizard.metrics:metrics-core:3.1.0'
compile 'io.dropwizard.metrics:metrics-graphite:3.1.2'
compile 'io.dropwizard.metrics:metrics-annotation:3.1.2'

Здесь я пытаюсь отправить данные на сервер Graphite, работающий локально. Я настроил контроллер следующим образом с помощью графитового репортера. Когда я запускаю приложение, оно ничего не сообщает, я пытаюсь понять, где я ошибаюсь, или, пожалуйста, дайте мне знать, если есть другой подход (например, с использованием Spring AOP)

import com.codahale.metrics.ConsoleReporter
import com.codahale.metrics.MetricFilter
import com.codahale.metrics.MetricRegistry
import com.codahale.metrics.SharedMetricRegistries
import com.codahale.metrics.annotation.Metered
import com.codahale.metrics.annotation.Timed
import com.codahale.metrics.graphite.Graphite
import com.codahale.metrics.graphite.GraphiteReporter
import io.astefanutti.metrics.aspectj.Metrics

import java.util.concurrent.TimeUnit

@Metrics(registry = "graphiteregistry2")
class GlassdoorController {


    final MetricRegistry registry = new MetricRegistry();

    GlassdoorController() {

        final Graphite graphite = new Graphite(new InetSocketAddress("127.0.0.1", 2003));

        final GraphiteReporter reporter = GraphiteReporter.forRegistry(registry)
                .prefixedWith("grails.example.com")
                .convertRatesTo(TimeUnit.SECONDS)
                .convertDurationsTo(TimeUnit.MILLISECONDS)
                .filter(MetricFilter.ALL)
                .build(graphite);
        reporter.start(1, TimeUnit.SECONDS);

        ConsoleReporter reporter1 = ConsoleReporter.forRegistry(registry)
                .convertRatesTo(TimeUnit.SECONDS)
                .convertDurationsTo(TimeUnit.MILLISECONDS)
                .build();
        reporter1.start(5, TimeUnit.SECONDS)

        SharedMetricRegistries.add("graphiteregistry2",registry);
        log.info(SharedMetricRegistries.getOrCreate("graphiteregistry2"));
    }

    @Metered(name  = "reviewspage")
    @Timed(name = "reviewspagetimed")
    def reviews() {

        //business logic

    }

person simplyblue    schedule 01.03.2016    source источник
comment
Вы можете увидеть какие-либо данные с tcpflow, входящим в 2003 году из приложения?   -  person kwarunek    schedule 02.03.2016
comment
AFAIF, ConsoleReporter и GraphiteReporter должны печатать одни и те же данные, я получаю пустые строки, когда ConsoleReporter что-то печатает   -  person simplyblue    schedule 02.03.2016


Ответы (1)


Глядя на ваш код, я заметил разницу:

reporter.start(1, TimeUnit.SECONDS);
// ...
reporter1.start(5, TimeUnit.SECONDS)

Это означает, что ваш Graphite Reporter срабатывает каждую секунду, а консольный Reporter — только каждые 5 секунд. Вероятно, ваша тестовая программа существует до истечения этих 5 секунд. Таким образом, вы можете либо добавить что-то Thread.sleep(6000) к вашему main() методу, либо уменьшить интервал отчетов для консольного репортера, чтобы он соответствовал репортеру Graphite. Я пробовал, работает. ;-)

06.03.16 12:22:59 ==============================================================

-- Meters ----------------------------------------------------------------------
de.scrum_master.app.GlassdoorController.reviewspage
             count = 1
         mean rate = 0,20 events/second
     1-minute rate = 0,20 events/second
     5-minute rate = 0,20 events/second
    15-minute rate = 0,20 events/second

-- Timers ----------------------------------------------------------------------
de.scrum_master.app.GlassdoorController.reviewspagetimed
             count = 1
         mean rate = 0,20 calls/second
     1-minute rate = 0,20 calls/second
     5-minute rate = 0,20 calls/second
    15-minute rate = 0,20 calls/second
               min = 0,01 milliseconds
               max = 0,01 milliseconds
              mean = 0,01 milliseconds
            stddev = 0,00 milliseconds
            median = 0,01 milliseconds
              75% <= 0,01 milliseconds
              95% <= 0,01 milliseconds
              98% <= 0,01 milliseconds
              99% <= 0,01 milliseconds
            99.9% <= 0,01 milliseconds
person kriegaex    schedule 06.03.2016
comment
Вы заставили его работать в Grails, у меня он работает с чистой Java, но не с Grails, если вы заставили его работать с Grails, дайте мне знать - person simplyblue; 06.03.2016
comment
Я не использую Grails, но могу воспроизвести симптом с помощью чистой Java. Вы исследовали, может ли длительный промежуток времени быть проблемой? Я не могу себе представить, что если это работает с Graphite, но не на консоли, проблема должна быть в Gradle или Groovy. Подозреваю, что проблема в клавиатуре. - person kriegaex; 06.03.2016