2013-03-26 51 views
10

如何将自定义指标添加到Dropwizard在管理端口(8081)上提供的默认内容?除了添加健康检查外,我无法在文档中找到任何内容。我非常喜欢从MongoDB中检索一些统计信息,并且宁愿使用8081上的管理资源,而不是在端口8080上创建自定义指标页面。向Dropwizard添加其他指标

回答

5

Dropwizard使用Metrics库来评估其所有指标。公制的getting started section拥有您开始添加自己所需的一切。

+2

我了解如何创建度量标准,但仍不确定如何将它们添加到Dropwizard在8081上提供的度量标准。 – johncowie 2013-03-26 14:22:07

+3

只有在您创建度量标准并开始使用度量标准后才会发生这种情况。 – 2013-03-27 02:30:25

+0

啊,我明白了。很好,谢谢。 – johncowie 2013-03-27 10:33:42

4

这里是一个例子。 jvm实例中的每个度量都通过JMX公开。您还可以注册度量记录器,这些度量记录器可以按照时间间隔将所有度量标准转储为日志记录,或者在一段时间内将数据转储为石墨。

//this creates or returns the metrics, basically every metric is only created once and registered in a registry 
    private final Timer timerCanMakeHold = 
       Metrics.newTimer(MyClass.class, "METRICNAME", TimeUnit.MILLISECONDS, TimeUnit.SECONDS); 

     final TimerContext timerContex = timerCanMakeHold.time(); 
     try{  
      doSomeWork()//this is what you are timing 
     }finally{ 
      timerContex.stop(); 
     } 
2

我没有测试它,但也许这将有助于:

final Graphite graphite = new Graphite(new InetSocketAddress("graphite.url.example", 2003)); 
    MetricRegistry metrics = new MetricRegistry(); 
    GraphiteReporter reporter = GraphiteReporter.forRegistry(metrics) 
         .convertRatesTo(TimeUnit.SECONDS) 
         .convertDurationsTo(TimeUnit.MILLISECONDS) 
         .build(graphite); 
    reporter.start(1, TimeUnit.SECONDS); 
    Counter counter = metrics.counter("nameOfCounter"); 
    counter.inc(); 

常春藤,你必须添加到您的ivy.xml:

 <dependency org="io.dropwizard" name="dropwizard-metrics" rev="0.7.1"/> 
     <dependency org="io.dropwizard" name="dropwizard-metrics-graphite" rev="0.7.1"/> 

如果你把这到你的config.yml中,

metrics: 
    reporters: 
    - type: console 
     timeZone: UTC 
     output: stdout 
     durationUnit: milliseconds 
     rateUnit: seconds 
     frequency: 120 seconds 
    - type: graphite 
     host: localhost 
     port: 9090 
     prefix: test.prefix 

你可以al所以调用MetricsFactory运行中的方法:

 MetricRegistry metrics = new MetricRegistry(); 
     MetricsFactory mfac = configuration.getMetricsFactory(); 
     mfac.configure(environment.lifecycle(), metrics); 
     Counter counter = metrics.counter("nameOfCounter"); 
     counter.inc(); 
     counter.inc(); 
     counter.inc(); 
     counter.inc(); 
     counter.inc(); 

如果你建立你自己的套接字监听器,然后就可以看到这条线每XXX秒传入:

test.prefix.nameOfCounter.count 5 1411562372 
1

如果你希望你的指标,显示了使用Dropwizard项目中包含的度量servlet,您必须使用Servlet使用的相同MetricRegistry对象,并将度量注册到其中。

您可以在应用程序中从环境中获取正确的MetricRegistry实例;或者从启动期间传递给它的initilaize方法的Bootstrap对象。

Dropwizard文档未能提及MetricRegistry的范围及其包含的对象。这意味着你只需创建你自己的MetricRegistry。这对于独立的“入门”应用程序来说工作得很好,但该文档是关于将度量标准添加到现有的Dropwizard应用程序,而不是新的独立应用程序。