【问题标题】:DropWizard Custom ReporterDropWizard 自定义报告器
【发布时间】:2016-10-11 19:14:39
【问题描述】:

我正在尝试为 DropWizard Metrics 创建自定义报告器,但找不到任何资源或示例来说明如何通过扩展 ScheduledReporter 创建报告器。我可以通过关注现有的报告器(CSV、SLF4J 等)来扩展这个类,但是我在哪里注册呢?

这是我尝试注册的自定义 Reporter 的摘录:

public class DbReporter extends ScheduledReporter {
    private final Connection connection;
    private final Clock clock;

    public static DbReporter.Builder forRegistry(MetricRegistry registry) {
        return new DbReporter.Builder(registry);
    }

    private DbReporter(MetricRegistry registry, Connection connection, Clock clock, MetricFilter filter, TimeUnit rateUnit, TimeUnit durationUnit) {
        super(registry, "db-reporter", filter, rateUnit, durationUnit);
        this.connection = connection;
        this.clock = clock;
    }

    //...

    public static class Builder {
        private final MetricRegistry registry;
        private Connection connection;
        private TimeUnit rateUnit;
        private TimeUnit durationUnit;
        private MetricFilter filter;
        private Clock clock;

        private Builder(MetricRegistry registry) {
            this.registry = registry;
            this.connection = null;
            this.rateUnit = TimeUnit.SECONDS;
            this.durationUnit = TimeUnit.MILLISECONDS;
            this.filter = MetricFilter.ALL;
            this.clock = Clock.defaultClock();
        }

        public DbReporter.Builder outputTo(Connection connection) {
            this.connection = connection;
            return this;
        }

        public DbReporter.Builder convertRatesTo(TimeUnit rateUnit) {
            this.rateUnit = rateUnit;
            return this;
        }

        public DbReporter.Builder convertDurationsTo(TimeUnit durationUnit) {
            this.durationUnit = durationUnit;
            return this;
        }

        public DbReporter.Builder filter(MetricFilter filter) {
            this.filter = filter;
            return this;
        }

        public DbReporter build() {
            return new DbReporter(this.registry, this.connection, this.clock, this.filter, this.rateUnit, this.durationUnit);
        }
    }
}

而且,这是创建自定义 Reporter 的正确方法还是有其他方法?

提前致谢。-

【问题讨论】:

  • 是的,这是正确的方法。您注册它们的方式与注册其他的完全相同(请参阅指标文档)
  • @pandaadb 是的,但我还没有注册任何东西。

标签: java dropwizard metrics


【解决方案1】:

是的,您可以以相同的方式实现它们。至于注册,通常在 DW 实例化 Metrics 之后在您的主应用程序中完成。

例如,在你的 run 方法中:

@Override
    public void run(final Configuration configuration,
                    final Environment environment)  {
        log.info(String.format("Starting %s server with version: %s", getName(), configuration.getVersion()));

        CsvReporter.forRegistry(environment.metrics()).build(new File("path/to/csv"));
    }

希望对你有帮助,

阿图尔

【讨论】:

  • 你没有理解我的问题。查看更新后的问题。
  • 再次:是的,这是创建您自己的自定义报告器的正确方法,并查看我的回答以及您将在何处以及如何注册它。你还想知道什么,因为这些是我在你的帖子中看到的唯一问题......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多