11

如何将自定义指标添加到 Dropwizard 在管理端口 (8081) 上提供的默认内容?除了添加健康检查之外,我在文档中找不到任何内容。我很想合并从 MongoDB 检索到的一些统计信息,并且宁愿将其与 8081 上的管理资源一起保存,也不愿在端口 8080 上创建自定义指标页面。

4

4 回答 4

5

Dropwizard 的所有指标都使用Metrics库。Metric 的入门部分包含您开始添加自己的所需的一切。

于 2013-03-26T13:17:03.517 回答
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();
        }
于 2013-04-17T21:08:32.763 回答
4

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

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

Dropwizard 文档没有提到 MetricRegistry 的范围和它包含的对象。这意味着您只需创建自己的 MetricRegistry。这适用于独立的“入门”应用程序,但该文档是关于将指标添加到现有的 Dropwizard 应用程序,而不是新的独立应用程序。

于 2016-07-18T23:33:25.227 回答
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.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
于 2014-09-18T07:53:02.070 回答