2016-06-13 6 views
0

Я пытаюсь сделать очень простое измерение производительности некоторых из моих API, чтобы определить, сколько времени они занимают. Я добавил тестовый ресурс:метрики dropwizard и время API

private static final MetricRegistry metrics = new MetricRegistry(); 
private final Timer responses = metrics.timer("test_responses"); 

@GET 
public void test() { 
    final Timer.Context context = responses.time(); 
    try { 
     log.info("sleeping..."); 
     Thread.sleep(10*1000); 
    } catch (InterruptedException e) { 
    } finally { 
     context.stop();//2 
    } 
} 

и добавил folllowing к моему основному классу Application:

ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics).convertRatesTo(TimeUnit.SECONDS).convertDurationsTo(TimeUnit.MILLISECONDS).build(); 
    reporter.start(10, TimeUnit.SECONDS); 

Каждые десять секунд я вижу:

6/13/16 11: 38:51 AM = = = = = ==============

6/13/16 11:39:01 AM ===================== ==============================

Но ничего о метрике «test_responses» я не создал. Любая помощь очень ценится!

+0

ли вы вызываете свой метод испытания? – pandaadb

ответ

1

Ваша проблема заключается в том, что вы используете 2 экземпляра реестров метрик. Посмотрите на этот пример:

public class Application extends io.dropwizard.Application<Configuration>{ 

    @Override 
    public void run(Configuration configuration, Environment environment) throws Exception { 
     MetricRegistry metrics = environment.metrics(); 
     environment.jersey().register(new HelloResource(metrics)); 

     ConsoleReporter.forRegistry(metrics).build().start(1, TimeUnit.SECONDS);; 
    } 

    public static void main(String[] args) throws Exception { 
     new Application().run("server", "/home/artur/dev/repo/sandbox/src/main/resources/config/test.yaml"); 
    } 
} 

Я использую реестр показателей, который создает DW для вас. Это MR также включает статистику Jetty.

Мой ресурс:

@Path("/test") 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
public class HelloResource { 

    private MetricRegistry service; 

    public HelloResource(MetricRegistry service) { 
     this.service = service; 
    } 

    @GET 
    public String hello() { 

     Timer timer = service.timer("test"); 

     try(Context t = timer.time()) { 
      return "Hello World"; 
     } 

    } 
} 

И выход:

test 
      count = 3 
     mean rate = 0.89 calls/second 
    1-minute rate = 0.00 calls/second 
    5-minute rate = 0.00 calls/second 
    15-minute rate = 0.00 calls/second 
       min = 0.00 milliseconds 
       max = 0.01 milliseconds 
       mean = 0.00 milliseconds 
      stddev = 0.00 milliseconds 
      median = 0.00 milliseconds 
       75% <= 0.01 milliseconds 
       95% <= 0.01 milliseconds 
       98% <= 0.01 milliseconds 
       99% <= 0.01 milliseconds 
      99.9% <= 0.01 milliseconds 

Я вызывается метод испытания, в 3 раза, и вы можете увидеть статистику, записанные с помощью MetricRegistry.

Я надеюсь, что решает вашу проблему.

С уважением,

Артур