2013-03-26 29 views
10

Jak mogę dodać niestandardowe dane do domyślnych elementów, które Dropwizard zapewnia na porcie administratora (8081)? Nie mogę znaleźć niczego w dokumentacji oprócz dodania kontroli zdrowia. Chciałbym włączyć pewne statystyki pobrane z MongoDB i wolałbym zachować je z zasobami administratora w 8081 niż tworzyć niestandardową stronę metryki na porcie 8080.Dodawanie dodatkowych danych do Dropwizard

Odpowiedz

5

Dropwizard używa biblioteki Metrics dla wszystkich swoich danych. Metric getting started section ma wszystko, czego potrzebujesz, aby zacząć dodawać własne.

+2

Rozumiem, jak tworzyć metryki, ale nadal nie jestem pewien, jak dodać je do danych, które Dropwizard dostarcza w 8081. – johncowie

+3

Stanie się tak po utworzeniu danych i rozpoczęciu korzystania z nich. –

+0

Ahh Rozumiem. Perfekcyjnie, dzięki. – johncowie

4

Oto przykład. Każda metryka w tej instancji jvm jest odsłonięta przez JMX. Możesz także zarejestrować rejestratory metryczne, które wykonają zadanie, wyrzuca wszystkie metryki do rejestrów w interwale lub przesyłają do grafitu w określonym przedziale czasowym.

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

nie testowałem, ale być może to może pomóc:

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

Dla bluszcz trzeba dodać do swojej 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"/> 

Jeśli wstawisz to do twojego 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 

możesz al tak nazywają MetricsFactory w metodzie 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(); 

Jeśli budować jesteś właścicielem gniazdo słuchacza, a następnie można zobaczyć tej linii zasilającej co xxx sekundach:

test.prefix.nameOfCounter.count 5 1411562372 
1

Jeśli chcesz, aby Twoje dane, aby pokazać się z serwletem metryk, który jest zawarty w projekcie Dropwizard, musisz użyć tego samego obiektu MetricRegistry, z którego korzystał serwlet, i zarejestrować w nim swoje dane.

Możesz uzyskać poprawną instancję MetricRegistry ze środowiska w swojej aplikacji; lub z obiektu Bootstrap, który został przekazany do metody initilaize podczas uruchamiania.

Dokumentacja Dropwizarda nie wspomina o zakresie MetricRegistry i obiektach, które zawiera. Oznacza to, że po prostu tworzysz własną MetricRegistry. To zadziała dobrze dla samodzielnej aplikacji "rozpoczęcie pracy", ale dokument dotyczy dodawania metryk do istniejącej aplikacji Dropwizard, a nie do nowej, niezależnej aplikacji.

Powiązane problemy