向Dropwizard添加其他指标

11

我该如何添加自定义指标到Dropwizard提供的默认内容中,以便在管理端口(8081)上查看?除了添加健康检查之外,文档中似乎没有其他相关信息。我想将一些从MongoDB检索的统计数据整合进来,并且更愿意将其与8081上的管理资源集成,而不是在8080端口上创建自定义指标页面。

4个回答

6
如果您希望在Dropwizard项目中使用包含的指标servlet显示指标,您必须使用与servlet使用的相同的MetricRegistry对象,并将您的指标注册到其中。
您可以从应用程序中的环境获取正确的MetricRegistry实例;或者从传递给其初始化方法的Bootstrap对象中获取。
Dropwizard文档未提及MetricRegistry及其包含的对象的范围。它暗示您只需创建自己的MetricRegistry。对于独立的“入门”应用程序,这将很好地工作,但该文档是关于向现有的Dropwizard应用程序添加指标,而不是新的独立应用程序。

3
这个答案帮了我很多。需要澄清的是,在 Dropwizard 1.3.7 中,访问应用程序 run 方法中的度量注册表的方法是 environment.metrics() - Geraint Ballinger

5
Dropwizard使用Metrics库来处理所有指标。Metric的入门部分包含了你需要开始添加自己的指标的所有内容。

2
我理解如何创建指标,但仍不确定如何将它们添加到Dropwizard在8081上提供的指标中。 - johncowie
3
在你创建并开始使用度量标准后,它就会自然而然地发生。 - Michael Fairley
有没有示例可以展示如何在管理员端口或其他指标的同时公开新的指标。这将非常有帮助。谢谢。 - Sandy T
2
你能进一步解释一下它是如何添加的吗?你可以将指标添加到任何注册表中吗? - Timothy055
起步链接已失效,您是否指的是 https://dropwizard.github.io/metrics/3.1.0/getting-started/ ? - Adam Parkin
只是想补充一下,您需要与Dropwizard使用的MetricRegistry实例相同,以便输出指标。Dropwizard的Environment和Bootstrap类都公开了获取MetricRegistry实例的方法。 - EFreak

4

这里有一个例子。在该JVM实例中,每个指标都通过JMX公开。您还可以注册度量报告器,这些报告器将在间隔期间执行操作,例如将所有指标转储到日志中或定时发送到Graphite。

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

3
我还没有测试过,但也许这可以帮助你:
    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,您需要将以下内容添加到您的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接