向Dropwizard添加其他指标

时间:2013-03-26 11:16:36

标签: java dropwizard

如何将自定义指标添加到Dropwizard在管理端口(8081)上提供的默认内容?除了添加健康检查之外,我在文档中找不到任何内容。我非常希望合并一些从MongoDB中检索到的统计数据,而不是在8081上使用管理资源,而不是在端口8080上创建自定义指标页面。

4 个答案:

答案 0 :(得分:5)

Dropwizard使用Metrics库来获取所有指标。度量标准getting started section包含您开始添加自己的所有内容。

答案 1 :(得分: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 :(得分: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

您也可以在run方法中调用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

答案 3 :(得分:2)

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

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

Dropwizard文档未提及MetricRegistry的范围及其包含的对象。这意味着您只需创建自己的MetricRegistry。这对于独立的人来说是合适的,并且#34;开始使用&#34;应用程序,但该文档是关于将指标添加到现有的Dropwizard应用程序,而不是新的独立应用程序。