2013-03-26 12 views
10

Come faccio ad aggiungere le metriche personalizzate agli elementi predefiniti forniti da Dropwizard sulla porta di amministrazione (8081)? Non riesco a trovare nulla nella documentazione oltre all'aggiunta di controlli di integrità. Mi piacerebbe incorporare alcune statistiche recuperate da MongoDB e preferirei mantenerle con le risorse di amministrazione su 8081 anziché creare una pagina di metriche personalizzate sulla porta 8080.Aggiunta di metriche aggiuntive a Dropwizard

risposta

5

Il dropwizard utilizza la libreria Metrics per tutte le sue metriche. Metric's getting started section ha tutto il necessario per iniziare ad aggiungerne di propri.

+2

Capisco come creare le metriche, ma non sono ancora sicuro di come aggiungerle alle metriche fornite da Dropwizard su 8081. – johncowie

+3

Accadrà solo dopo aver creato la metrica e iniziare a usarla. –

+0

Ah, capisco. Perfetto grazie. – johncowie

4

Ecco un esempio. Ogni metrica in quell'istanza di jvm viene esposta tramite JMX. È inoltre possibile registrare i reporter metrici che eseguiranno il routing delle cose, trasferendo tutte le metriche ai registri su intervallo o spedendo alla grafite su un intervallo.

//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

non l'ho provato, ma forse questo potrebbe aiutare:

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

Per edera si deve aggiungere questo alla vostra 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"/> 

Se si mette questo nel tuo 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 

si può al così chiamata la MetricsFactory nel metodo run:

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

Se si costruisce si possiede socket di ascolto, allora si può vedere questa linea in arrivo ogni xxx secondi:

test.prefix.nameOfCounter.count 5 1411562372 
1

Se si desidera che le metriche di presentarsi con il servlet metriche incluso nel progetto Dropwizard, è necessario utilizzare lo stesso oggetto MetricRegistry utilizzato dal servlet e registrarvi le metriche.

È possibile ottenere l'istanza di MetricRegistry corretta dall'ambiente nell'applicazione; o dall'oggetto Bootstrap passato al metodo initilaize durante l'avvio.

La documentazione di Dropwizard non menziona l'ambito di MetricRegistry e gli oggetti in esso contenuti. Implica che tu crei solo il tuo MetricRegistry. Funzionerà bene per l'applicazione stand-alone "introduttiva", ma il documento riguarda l'aggiunta di metriche a un'applicazione Dropwizard esistente, non una nuova applicazione autonoma.

Problemi correlati