2013-03-26 79 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應用程序,而不是新的獨立應用程序。