2016-03-01 35 views
1

我正在为带有注释的grails应用程序配置dropwizard度量标准。使用指标,AspectJ的插件(https://github.com/astefanutti/metrics-aspectjDropwizard度量标准不起作用的grails注释

在`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 

    } 
+0

你能看到任何数据与tcpflow传入2003年从应用程序? – kwarunek

+0

AFAIF,'ConsoleReporter'和'GraphiteReporter'应该输出相同的数据,当'ConsoleReporter'输出一些东西时,我会得到空行 – simplyblue

回答

0

看你的代码,我发现了一个差异:

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

这意味着您的石墨记者激发每一秒,但控制台仅记者每隔5秒。可能你的测试程序在5秒钟之前就已经存在了。因此,您可以将Thread.sleep(6000)添加到您的main()方法中,或者减少控制台记者与石墨记者相匹配的报告间隔。我试过了,它有效。 ;-)

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 
+0

你是否在grails中工作过,我已经使用纯java工作,但没有使用grails,if你已经使它与Grails合作,让我知道 – simplyblue

+0

我不使用Grails,但可以用纯Java重现症状。你有没有调查过长时间是否会成为问题?我无法想象如果它适用于Graphite,但不在控制台上,Gradle或Groovy应该是问题所在。我怀疑问题出在键盘前面。 – kriegaex