2013-03-26 3 views
10

Как мне добавить добавление настраиваемых показателей в материал по умолчанию, который Dropwizard предоставляет на порт администратора (8081)? Я не могу найти ничего в документации, кроме добавления проверок работоспособности. Я бы очень хотел включить некоторые статистические данные, извлеченные из MongoDB, и скорее сохранил бы его с ресурсами администратора на 8081, чем создать страницу пользовательских показателей на порту 8080.Добавление дополнительных показателей в Dropwizard

ответ

5

Dropwizard использует библиотеку Metrics для всех своих показателей. Metric's getting started section имеет все необходимое, чтобы начать добавлять свои собственные.

+2

Я понимаю, как создавать метрики, но все еще не уверен, как добавить их к метрикам, которые Dropwizard поставляет на 8081. – johncowie

+3

Это произойдет только после того, как вы создадите метрику и начнете ее использовать. –

+0

Ах, я вижу. Отлично, спасибо. – johncowie

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(); 

Если построить собственные сокеты слушателя, то вы можете увидеть эту линию, поступающей через каждые ххе секунды:

test.prefix.nameOfCounter.count 5 1411562372 
1

Если вы хотите, чтобы ваши показатели, чтобы показать с сервлетом метрик, который включен в ваш проект Dropwizard, вы должны использовать тот же объект MetricRegistry, что и сервлет, и регистрировать в нем свои показатели.

Вы можете получить правильный экземпляр MetricRegistry из среды в приложении; или из объекта Bootstrap, который передается методу initilaize во время запуска.

В документации Dropwizard не упоминается область действия MetricRegistry и объектов, которые она содержит. Это означает, что вы просто создаете свой собственный MetricRegistry. Это будет отлично работать для самостоятельного приложения «начать работу», но документ посвящен добавлению показателей к существующему приложению Dropwizard, а не к новому автономному приложению.

Смежные вопросы